En esta guía se desarrollará la creación de Data Frame, además de selección de variables y observaciones. Por último se mostrará como agregar filas y columnas a los data frame.
Los Data Frame son estructuras que integran, por ejemplo, vectores con el fin de crear una base de datos.
Los Data Frame tiene la siguiente estructura.
data.frame("Vectores", "row.names=","stringsAsFactors ="
Donde data.frame
es el comando para integrar los vectores y formar una base de datos. row.names
es el argumento para indicar el nombre de las filas. stringsAsFactors
es un argumento lógico que toma TRUE
o FALSE
, si se coloca TRUE se indica a R si se convertirá los vectores carcateres en factores.
Veamos un ejemplo.
Primero crearemos vectores para luego convertirlos en un data frame.
# Creando Vectores.
set.seed(5)
edad<-sample(10:30, size = 100, replace = TRUE)
sexo<-sample(c("Masculino","Femenino"), size = 100, replace = TRUE)
ingresos<-sample(1000:5000, size = 100, replace = TRUE)
raza<-sample(c("blanco","negro"), size = 100, replace = TRUE)
Podemos darnos cuenta que todos los vectores tienen un tamaño de 100, es decir, tienen 100 elementos. Se crearon los vectores “edad”, “sexo”, “ingresos” y “raza”. Para crear un data frame se usa la siguiente sintaxis.
datos<-data.frame(edad,sexo,ingresos,raza)
Nuestro Data Frame que hemos creado se llama datos que es la unión de los vectores: edad, sexo, ingresos, raza.
Para poder ver la base de datos usamos el comando View()
.
View(datos) # Para ver la base de datos.
Al crear el data frame no usamos el argumento stringsAsFactors
, por tanto se consideró su valor por defecto que es TRUE, lo que hizo es transformar los vectores caracteres sexo y raza en factores. Para comprobarlo usamos la siguiente sintaxis.
is.factor(datos$sexo) # Para comprobar que el vector sexo es factor.
## [1] TRUE
is.factor(datos$raza) # Para comprobar que el vector raza es factor.
## [1] TRUE
En efecto, los vectores sexo y raza se han convertido en factores.
En guías anteriores se indicó el uso del comando $
el cual hace posible la selección de una variable desde un data frame. Por eso en la sintaxis anterior se usó datos$sexo
, lo que indica es que del data.frame datos se seleccione con $ el vector sexo.
Si deseamos conocer la estructura del data frame, usaremos la siguiente sintaxis.
str(datos) # Para conocer la estructura del data frame.
## 'data.frame': 100 obs. of 4 variables:
## $ edad : int 14 24 29 15 12 24 21 26 30 12 ...
## $ sexo : Factor w/ 2 levels "Femenino","Masculino": 1 1 1 1 1 2 2 1 2 2 ...
## $ ingresos: int 1092 1517 4488 3818 4002 3065 3330 1738 2908 2051 ...
## $ raza : Factor w/ 2 levels "blanco","negro": 2 1 2 1 1 2 2 1 1 2 ...
Nos indica la existencia de 4 variables y cada uno con 100 observaciones. Además podemos observar que las variables edad e ingresos son integer
(números enteros) y las variables sexo y raza son factor
.
Si sólo deseamos observar el nombre de las variables que conforman nuestro data frame, usaremos el comando names()
.
names(datos) # Para observar el nombre de las variables de la base de datos.
## [1] "edad" "sexo" "ingresos" "raza"
En efecto, tenemos el nombre de las 4 variables.
Ahora, si deseamos obtener el nombre de las variables y las primeras 6 filas del data frame, usamos el comando head()
.
head(datos) # Para observar las primeras 6 filas de la base de datos.
## edad sexo ingresos raza
## 1 14 Femenino 1092 negro
## 2 24 Femenino 1517 blanco
## 3 29 Femenino 4488 negro
## 4 15 Femenino 3818 blanco
## 5 12 Femenino 4002 blanco
## 6 24 Masculino 3065 negro
Pero puede darse el caso de querer ver una cantidad mayor de filas, por ejemplo, 10 filas. Para quello usaremos el argumento n=
en el comando head
.
head(datos, n=10L) # Para observar las primeras 10 filas de la base de datos.
## edad sexo ingresos raza
## 1 14 Femenino 1092 negro
## 2 24 Femenino 1517 blanco
## 3 29 Femenino 4488 negro
## 4 15 Femenino 3818 blanco
## 5 12 Femenino 4002 blanco
## 6 24 Masculino 3065 negro
## 7 21 Masculino 3330 negro
## 8 26 Femenino 1738 blanco
## 9 30 Masculino 2908 blanco
## 10 12 Masculino 2051 negro
Usted recordará que para especificar un número entero se usa al constado del número la letra L
. En el ejemplo 10L
indica que 10 es un número entero.
Pero si se presentase la necesidad de poder ver las últimas filas, usted debería se usar el comando tail()
.
tail(datos) # Para observar las últimas 6 filas de la base de datos.
## edad sexo ingresos raza
## 95 16 Masculino 2636 negro
## 96 27 Masculino 2812 negro
## 97 14 Masculino 1314 blanco
## 98 23 Femenino 1097 negro
## 99 19 Masculino 2389 negro
## 100 19 Femenino 4642 blanco
Al igual que antes usted puede colocar el argumento n=
y colocar las filas deseadas.
Otro de los comandos importantes es para saber la dimensión del data frame, para esto usamos el comando dim()
.
dim(datos) # Para observar la dimensión de la base de datos.
## [1] 100 4
Podemos ver que tiene 100 filas y 4 columnas. Que es lo que pasará si usamos dim(datos)[1]
o dim(datos)[2]
.
En la guía de matrices se indicó que una parte fundamental de ese contenido era seleccionar filas y columnas, ya que se usaba la misma sintaxis para data frame.
Es así que si deseamos seleccionar las 10 primeras filas del data frame usaremos la siguiente sintaxis.
datos[1:10,] # Para extraer las 10 primeras filas de la base de datos.
## edad sexo ingresos raza
## 1 14 Femenino 1092 negro
## 2 24 Femenino 1517 blanco
## 3 29 Femenino 4488 negro
## 4 15 Femenino 3818 blanco
## 5 12 Femenino 4002 blanco
## 6 24 Masculino 3065 negro
## 7 21 Masculino 3330 negro
## 8 26 Femenino 1738 blanco
## 9 30 Masculino 2908 blanco
## 10 12 Masculino 2051 negro
Si se desea extraer sólo las dos primeras variables, es decir, las dos primeras columnas.
head(datos[,1:2]) # Para extraer las dos primeras columnas de la base de datos.
## edad sexo
## 1 14 Femenino
## 2 24 Femenino
## 3 29 Femenino
## 4 15 Femenino
## 5 12 Femenino
## 6 24 Masculino
Usamos el comando head()
para que no se muestre las 100 filas.
Pero si sólo nos interesaría las primeras 20 filas de las primeras 3 variables, la sintaxis sería:
datos[1:20,1:3] # Para extraer las 20 primeras filas de las 3 primeras columnas.
## edad sexo ingresos
## 1 14 Femenino 1092
## 2 24 Femenino 1517
## 3 29 Femenino 4488
## 4 15 Femenino 3818
## 5 12 Femenino 4002
## 6 24 Masculino 3065
## 7 21 Masculino 3330
## 8 26 Femenino 1738
## 9 30 Masculino 2908
## 10 12 Masculino 2051
## 11 15 Masculino 4257
## 12 20 Femenino 4016
## 13 16 Femenino 2638
## 14 21 Masculino 2965
## 15 15 Masculino 1098
## 16 14 Masculino 2293
## 17 18 Masculino 1902
## 18 28 Masculino 1439
## 19 21 Femenino 4599
## 20 27 Masculino 1069
Para esta parte, usaremos lo aprendido en la guía de matrices y en la guía de operaciones lógicas.
Si sólo deseamos extraer todas las observaciones que tengan como sexo a Masculino. Usamos la siguiente sintaxis.
datos[datos$sexo=="Masculino",] # Para extraer todas las observaciones que son de sexo masculino.
## edad sexo ingresos raza
## 6 24 Masculino 3065 negro
## 7 21 Masculino 3330 negro
## 9 30 Masculino 2908 blanco
## 10 12 Masculino 2051 negro
## 11 15 Masculino 4257 negro
## 14 21 Masculino 2965 negro
## 15 15 Masculino 1098 negro
## 16 14 Masculino 2293 blanco
## 17 18 Masculino 1902 blanco
## 18 28 Masculino 1439 blanco
## 20 27 Masculino 1069 blanco
## 21 28 Masculino 1681 blanco
## 25 12 Masculino 4982 negro
## 26 20 Masculino 4197 blanco
## 29 12 Masculino 1353 blanco
## 30 30 Masculino 1622 negro
## 31 19 Masculino 4152 blanco
## 32 11 Masculino 1334 blanco
## 33 15 Masculino 1239 blanco
## 35 10 Masculino 3714 blanco
## 36 20 Masculino 1615 blanco
## 37 22 Masculino 3084 blanco
## 38 22 Masculino 1116 blanco
## 39 18 Masculino 2680 blanco
## 41 27 Masculino 4517 blanco
## 42 14 Masculino 1815 blanco
## 43 27 Masculino 4248 negro
## 51 18 Masculino 3457 negro
## 54 30 Masculino 1697 negro
## 58 15 Masculino 4779 blanco
## 59 14 Masculino 1299 blanco
## 62 13 Masculino 2698 negro
## 63 28 Masculino 1095 blanco
## 67 28 Masculino 2834 negro
## 68 13 Masculino 2114 negro
## 71 27 Masculino 3703 blanco
## 74 27 Masculino 1776 negro
## 75 10 Masculino 1566 blanco
## 77 10 Masculino 3967 negro
## 79 19 Masculino 3470 blanco
## 80 16 Masculino 3717 negro
## 83 14 Masculino 2953 negro
## 84 11 Masculino 2255 blanco
## 86 11 Masculino 1744 blanco
## 88 26 Masculino 4297 negro
## 90 22 Masculino 4664 negro
## 93 13 Masculino 3159 negro
## 95 16 Masculino 2636 negro
## 96 27 Masculino 2812 negro
## 97 14 Masculino 1314 blanco
## 99 19 Masculino 2389 negro
Si usted ha estado atento a las guías anteriores no tendrá ningún problema en entender la sintaxis. Pero si no, paso a explicar.
datos
indica del data frame datos, los corchetes []
se usan para filtrar o seleccionar filas, columnas o elementos del data frame. datos$sexo
se usa para decir que filtre la variable sexo. La condición lógica ==
siginfica igual a. Por último "Masculino"
, indica la palabra Masculino. En resumen, lo que se dice a R es que del data frame datos selecciona los elementos de la variable sexo que sean igual a Masculino.
Sólo para este caso se muestra todos los resultados, para los siguientes se usará el comando head
, para mostrar sólo las 6 primeras filas.
Si usted desea sólo trabajar con los que son de sexo masculino y de raza blanco.
head(datos[datos$sexo=="Masculino" & datos$raza=="blanco",]) # Para extraer las observaciones de sexo masculino y de raza blanco.
## edad sexo ingresos raza
## 9 30 Masculino 2908 blanco
## 16 14 Masculino 2293 blanco
## 17 18 Masculino 1902 blanco
## 18 28 Masculino 1439 blanco
## 20 27 Masculino 1069 blanco
## 21 28 Masculino 1681 blanco
Otro caso sería si usted desea trabajar sólo con las personas de sexo femenino y con ingresos mayores iguales a 4000.
head(datos[datos$sexo=="Femenino" & datos$ingresos>=4000,]) # Para extraer las observaciones de sexo femenino y con ingresos mayores iguales a 4000.
## edad sexo ingresos raza
## 3 29 Femenino 4488 negro
## 5 12 Femenino 4002 blanco
## 12 20 Femenino 4016 blanco
## 19 21 Femenino 4599 negro
## 23 14 Femenino 4791 negro
## 28 30 Femenino 4241 blanco
Si usted desea trabajar con las personas que tengan una edad mayor o igual a 24 años y que sean de raza negro. Pero omitiendo el comando head()
.
datos[datos$edad>=24 & datos$raza=="negro",][1:6,] # Para extarer las observaciones con edad mayor igual a 24 años y de raza negro, pero que sólo muestre las primeras 6 filas (para no usar head).
## edad sexo ingresos raza
## 3 29 Femenino 4488 negro
## 6 24 Masculino 3065 negro
## 22 25 Femenino 2771 negro
## 30 30 Masculino 1622 negro
## 43 27 Masculino 4248 negro
## 53 29 Femenino 2378 negro
No es casualidad la omisión de head()
se hace con el fin de mostrar que no es lo mismo usar atrás y adelante los []
.
Por ejemplo, si sólo se desea seleccionar de las primeras 20 filas, a las personas que son de 24 años o más y que son de raza negro.
datos[1:20,][datos$edad>=24 & datos$raza=="negro",] # Para extraer las observaciones con edad mayor igual a 24 años y de raza negro, pero sólo de las primeras 20 filas.
## edad sexo ingresos raza
## 3 29 Femenino 4488 negro
## 6 24 Masculino 3065 negro
## NA NA <NA> NA <NA>
## NA.1 NA <NA> NA <NA>
## NA.2 NA <NA> NA <NA>
## NA.3 NA <NA> NA <NA>
## NA.4 NA <NA> NA <NA>
## NA.5 NA <NA> NA <NA>
## NA.6 NA <NA> NA <NA>
## NA.7 NA <NA> NA <NA>
## NA.8 NA <NA> NA <NA>
## NA.9 NA <NA> NA <NA>
## NA.10 NA <NA> NA <NA>
## NA.11 NA <NA> NA <NA>
## NA.12 NA <NA> NA <NA>
## NA.13 NA <NA> NA <NA>
## NA.14 NA <NA> NA <NA>
## NA.15 NA <NA> NA <NA>
En efecto, sólo ha hecho la selección de las primeras 20 filas.
Pero se puede dar el caso que nosotros requeriramos el caso de filtrar una base de datos en donde las variables (columnas) tengan una característica especiales o comunes. En la siguiente sección se mostrará que hacer ante eso.
Si deseo filtrar sólo las variables que empiezan con la letra “a” o las variables que tengan como nombre o parte del nombre a “es”. Tendré que usar el comando select
del paquete "dplyr"
.
Por tanto, primero pasamos a instalar el paquete.
install.packages("dplyr")
Ahora, cargamos el paquete instalado.
library(dplyr)
Ahora sí podemos realizar los filtros. Pero es primordial conocer su sintaxis.
select("data.frame", "starts_with o ends_with o contains"
Donde select
es el comando para filtrar, en data.frame
irá el nombre del data frame, y se podrán usar tres opciones starts_with()
, ends_with()
o contains()
para indicar si empieza, si finaliza o contiene las caracteristicas deseadas, respectivamente.
Si nos interesa solo las variables que empiezan con “e”. Usaríamos la siguiente sintaxis.
head(select(datos, starts_with("e"))) # Para extraer variables que empiecen con la letra e.
## edad
## 1 14
## 2 24
## 3 29
## 4 15
## 5 12
## 6 24
Primero, usamos el comando head()
para mostrar sólo las primeras 6 filas. Después, el comando select()
para filtrar, luego la base de datos de donde filtrar datos
, posteriormente el argumento starts_with("e")
que indica que empiece con la letra “e”.
Ahora veamos si deseamos filtrar las variables que terminan en “a”.
head(select(datos, ends_with("A"))) # Para extraer variables que terminan con la letra a.
## raza
## 1 negro
## 2 blanco
## 3 negro
## 4 blanco
## 5 blanco
## 6 negro
En este caso se usó el argumento ends_with()
. Adicionalmente se puede dar cuenta que para el comando select
no interesa si la letra es mayúscula o minúscula.
Por último, si deseamos filtrar las variables que contengan una “e” como letra.
head(select(datos, contains("e"))) # Para extraer variables que contienen la letra e.
## edad sexo ingresos
## 1 14 Femenino 1092
## 2 24 Femenino 1517
## 3 29 Femenino 4488
## 4 15 Femenino 3818
## 5 12 Femenino 4002
## 6 24 Masculino 3065
En este caso, no importa si empieza o termina en “e”, siempre y cuando tenga una “e” en cualquier parte se filtrará.
Al igual que antes se usará lo aprendido en la guía de matrices.
Si deseamos incluir una columna nueva al data frame, usaremos el comando cbind()
.
Veamos un ejemplo para que quede claro.
Vamos a crear el vector casa.
# Se crea el vector casa de elementos "si" y "no".
set.seed(6)
casa<-sample(c("si","no"), size = 100, replace = TRUE)
Una vez creado lo agregamos al data frame datos
datos<-cbind(datos,casa) # Agregando la columna o variable casa.
Veamos como quedo la base de datos.
View(datos)
En efecto se ha agregado una columna más, la variable casa.
Si se desea agregar filas, tendrá que usar el comando rbind
. Pero primero tendrá que crear un data.frame
con las filas que se desea agregar.
Si deseo agregar dos filas más a las 100 filas que contiene la base de datos datos.
Primero creamos un data frame con las filas que deseamos agregar.
z<-data.frame(edad=c(20,24),
sexo=c("Femenino", "Femenino"),
ingresos=c(3000,5000),
raza=c("negro", "blanco"),
casa=c("si","si")) # Creando un DF con las nuevas oservaciones.
Como se puede observar hemos tenido que crear el data frame z
en donde se indica que tiene 2 filas. Una vez creado lo agregamos a nuestra base de datos con el comando rbind()
.
datos<-rbind(datos,z) # Uniendo los nuevos dataframe.
En efecto se puede observar que ahora se han añadido 2 filas más.
tail(datos)
## edad sexo ingresos raza casa
## 97 14 Masculino 1314 blanco no
## 98 23 Femenino 1097 negro no
## 99 19 Masculino 2389 negro no
## 100 19 Femenino 4642 blanco si
## 101 20 Femenino 3000 negro si
## 102 24 Femenino 5000 blanco si
En la siguiente guía se desarrollará el tema de importar base de datos de otras extensiones: .dat, .xlsx, .sav, .txt, .csv, entre otras.