Capítulo 6 Data.frames
Es una estructura de tipo tabular, que permite el uso de diferentes tipos de datos. Combina listas de vectores de la misma longitud. Para crear un data.frame usamos la función data.frame
.
Ejemplo, en una encuesta se tienen preguntas como las siguientes con sus respectivas respuestas:
- ¿Está vacunado para Influenza? : sí/no (lógicos)
- ¿Año de nacimiento? : 1990, 1981, 2000, 1952 (numérico)
- ¿Nacionalidad?: Chi, Rus, Mex, USA (caracteres)
6.1 Características de los data.frames
- Los nombres de columna no deben estar vacíos
- Los nombres de las filas deben ser únicos
- Los datos almacenados en un dataframe pueden ser de tipo numérico, factor o carácter.
- Cada columna debe contener el mismo número de elementos de datos
6.2 Creación de un data.frame
Crear data.frame “TipoDatos” a partir de los siguientes vectores:
<- c("Chi", "Rus", "Mex", "USA")
origen <- c(FALSE, TRUE, TRUE, TRUE)
vacunado <- c("1990", "1981", "2000", "1952")
fecha <- data.frame(origen, vacunado, fecha)
TipoDatos TipoDatos
## origen vacunado fecha
## 1 Chi FALSE 1990
## 2 Rus TRUE 1981
## 3 Mex TRUE 2000
## 4 USA TRUE 1952
str()
Brinda información sobre la estructura del data.frame.
str(TipoDatos)
## 'data.frame': 4 obs. of 3 variables:
## $ origen : chr "Chi" "Rus" "Mex" "USA"
## $ vacunado: logi FALSE TRUE TRUE TRUE
## $ fecha : chr "1990" "1981" "2000" "1952"
Para acceder a una columna de un data.frame, utilizamos el símbolo de pesos:
$fecha TipoDatos
## [1] "1990" "1981" "2000" "1952"
Otra forma de acceder a los elementos de un data.frames es mediante corchetes. Recordemos que esta nomenclatura la estudiamos en el capítulo anterior de Matrices.
3] TipoDatos[,
## [1] "1990" "1981" "2000" "1952"
De manera similar, para acceder a una fila de un data.frame utilizamos los corchetes, donde [fila, columna]
.
2,] TipoDatos[
## origen vacunado fecha
## 2 Rus TRUE 1981
6.3 Extracción de datos de un data.frame
6.3.1 Extracción de datos por columna
Crear un nuevo data.frame llamado “result” que contenga todos los datos de las columnas origen y fecha.
<- data.frame(TipoDatos$origen,TipoDatos$fecha)
result result
## TipoDatos.origen TipoDatos.fecha
## 1 Chi 1990
## 2 Rus 1981
## 3 Mex 2000
## 4 USA 1952
6.3.2 Extracción de datos por filas
Extraer todos los datos de las filas 1 y 2.
<- TipoDatos[1:2,]
subsets subsets
## origen vacunado fecha
## 1 Chi FALSE 1990
## 2 Rus TRUE 1981
6.4 Combinar data.frames
Creamos un segundo data.frame llamado “TipoDatos2”.
<- c("NA", "Pandemica", "Estacional", "NA")
cobertura <- factor(c("60", "50", "80", "20"), ordered = TRUE)
edad <- data.frame(cobertura, edad)
TipoDatos2 TipoDatos2
## cobertura edad
## 1 NA 60
## 2 Pandemica 50
## 3 Estacional 80
## 4 NA 20
Con cbind()
unimos dos data.frames del mismo tamaño mediante columnas. En este caso uniremos los data.frames TipoDatos
y TipoDatos2
.
<- cbind(TipoDatos,TipoDatos2)
datosfinales datosfinales
## origen vacunado fecha cobertura edad
## 1 Chi FALSE 1990 NA 60
## 2 Rus TRUE 1981 Pandemica 50
## 3 Mex TRUE 2000 Estacional 80
## 4 USA TRUE 1952 NA 20
6.5 Subset de datos
subset()
permite filtrar o extraer los datos que cumplen con un parámetro particular.
Si queremos obtener los datos de los pacientes menores a 60 años usamos:
subset(datosfinales, subset=edad <60)
## origen vacunado fecha cobertura edad
## 2 Rus TRUE 1981 Pandemica 50
## 4 USA TRUE 1952 NA 20
Si queremos obtener los datos de los pacientes vacunados usamos:
subset(datosfinales, subset=vacunado)
## origen vacunado fecha cobertura edad
## 2 Rus TRUE 1981 Pandemica 50
## 3 Mex TRUE 2000 Estacional 80
## 4 USA TRUE 1952 NA 20
Estos resultados los podemos guardar en distantas variables
<- subset(datosfinales, subset=edad <60)
pacientes_edad pacientes_edad
## origen vacunado fecha cobertura edad
## 2 Rus TRUE 1981 Pandemica 50
## 4 USA TRUE 1952 NA 20
<- subset(datosfinales, subset=vacunado)
pacientes_vacunados pacientes_vacunados
## origen vacunado fecha cobertura edad
## 2 Rus TRUE 1981 Pandemica 50
## 3 Mex TRUE 2000 Estacional 80
## 4 USA TRUE 1952 NA 20
6.6 Ejercicio
Creamos vectores con los valores para el nuevo data.frame
<- c("Juan", "Margarita", "Ruben", "Daniel")
nombre <- c("Sanchez", "Garcia", "Sancho", "Alfara")
apellido <- c(32, 25, 49, 52)
edad <- c("HOMBRE", "MUJER", "HOMBRE", "HOMBRE")
sexo <- c(1, 0, 3, 4) hijos
Creamos un data.frame con la ayuda de data.frame()
<- data.frame(nombre, apellido, edad, sexo, hijos)
censo censo
## nombre apellido edad sexo hijos
## 1 Juan Sanchez 32 HOMBRE 1
## 2 Margarita Garcia 25 MUJER 0
## 3 Ruben Sancho 49 HOMBRE 3
## 4 Daniel Alfara 52 HOMBRE 4
Para ver el encabezado del data.frame, usamos head()
head(censo)
## nombre apellido edad sexo hijos
## 1 Juan Sanchez 32 HOMBRE 1
## 2 Margarita Garcia 25 MUJER 0
## 3 Ruben Sancho 49 HOMBRE 3
## 4 Daniel Alfara 52 HOMBRE 4
Revisamos la estrucutra del data.frame
str(censo)
## 'data.frame': 4 obs. of 5 variables:
## $ nombre : chr "Juan" "Margarita" "Ruben" "Daniel"
## $ apellido: chr "Sanchez" "Garcia" "Sancho" "Alfara"
## $ edad : num 32 25 49 52
## $ sexo : chr "HOMBRE" "MUJER" "HOMBRE" "HOMBRE"
## $ hijos : num 1 0 3 4
is.data.frame(censo)
## [1] TRUE
Conocer el número de filas y columnas con dim()
dim(censo)
## [1] 4 5
Usamos nrow()
para obtener el número de filas
nrow(censo)
## [1] 4
Usamos ncol()
para obtener el número de columnas
ncol(censo)
## [1] 5
Conocer los nombres de las variables (del encabezado)
names(censo)
## [1] "nombre" "apellido" "edad" "sexo" "hijos"
Cambiar el nombre de las columnas en la tabla usando names()
.
names(censo) <- c("Nombre", "Apellido", "Edad", "Sexo", "Hijos")
names(censo)
## [1] "Nombre" "Apellido" "Edad" "Sexo" "Hijos"
Para asignar diferentes nombres a las columnas y filas de censo
también podemos usar colnames
y rownames
.
colnames(censo) <- c("Nombre", "Apellido", "Edad", "Sexo", "Número_Hijos")
rownames(censo) <- c("ID1", "ID2", "ID3", "ID4")
censo
## Nombre Apellido Edad Sexo Número_Hijos
## ID1 Juan Sanchez 32 HOMBRE 1
## ID2 Margarita Garcia 25 MUJER 0
## ID3 Ruben Sancho 49 HOMBRE 3
## ID4 Daniel Alfara 52 HOMBRE 4
6.6.1 Selección de Elementos
El acceso a los elementos que se encuentran en un data.frame es muy similar al de los datos de una matriz.
Acceder a los datos de las filas 2 a la 4:
2:4, ] censo[
## Nombre Apellido Edad Sexo Número_Hijos
## ID2 Margarita Garcia 25 MUJER 0
## ID3 Ruben Sancho 49 HOMBRE 3
## ID4 Daniel Alfara 52 HOMBRE 4
Acceder a los datos de la columna 3.
3] censo[,
## [1] 32 25 49 52
También podemos referirnos a la columna por su nombre:
$Nombre censo
## [1] "Juan" "Margarita" "Ruben" "Daniel"