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.

CREACIÓN DE 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.
El data frame 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].

SELECCIÓN DE UNA SUBMUESTRA.

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

Seleccionar usando condiciones lógicas.

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.

Seleccionar variables con características especiales o comunes.

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á.

AÑADIR FILAS Y COLUMNAS A LOS DATA FRAME.

Al igual que antes se usará lo aprendido en la guía de matrices.

Agregar Columnas.

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)
Data frame luego de agregar la variable casa


En efecto se ha agregado una columna más, la variable casa.

Agregar filas.

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.