Un Data.frame es muy parecido a una matriz de filas y columnas de dos dimensiones pero cada columna puede almacenar diferentes tipos de datos.

Creando un DF

En este caso creamos un DF de 3 columnas y dos filas o registros:

dfPersonas <- data.frame("Id" = 1:2, "Age" = c(21,15), "Name" = c("John","Dora"))

Inspeccionando un DF

> table(dfPersonas$Age) #

15 21 
 1  1

Estructura del DF:

> str(dfPersonas) #  2 Observaciones y 3 variables (columnas)
'data.frame':	2 obs. of  3 variables:
 $ Id  : int  1 2
 $ Age : num  21 15
 $ Name: Factor w/ 2 levels "Dora","John": 2 1

Clase objeto:

> class(dfPersonas) # "data.frame"
[1] "data.frame"

Resumen:

> summary(dfPersonas) # Resumen mínima, media, ...
       Id            Age         Name  
 Min.   :1.00   Min.   :15.0   Dora:1  
 1st Qu.:1.25   1st Qu.:16.5   John:1  
 Median :1.50   Median :18.0           
 Mean   :1.50   Mean   :18.0           
 3rd Qu.:1.75   3rd Qu.:19.5           
 Max.   :2.00   Max.   :21.0 

Dimensiones:

> dim(dfPersonas) # Dimensiones filas x columnas
[1] 2 3

Añadiendo una nueva columna

Vamos a añadir un valor booleano como columna nueva, los valores estan condicionados al contenido de otro columna, si la edad es mayor que 20 por ejemplo almacena TRUE para ese registro:

> dfPersonas$AgeGt20 <- dfPersonas$Age > 20
> dfPersonas
  Id Age Name AgeGt20
1  1  21 John    TRUE
2  2  15 Dora   FALSE

Podemos añadir una nueva columna con la función cbind() como en una matriz:

> dfPersonas <- cbind(dfPersonas,Surname=c("Doe","La exploradora"))
> dfPersonas
  Id Age Name AgeGt20        Surname
1  1  21 John    TRUE            Doe
2  2  15 Dora   FALSE La exploradora

Índices como en matrices y nombres como en listas…

Se pueden utilizar índices numéricos para seleccionar filas y columnas de la misma forma que en las matrices o podemos seleccionar una columna por su nombre.

> dfPersonas[,2] # 2. columna "Age"
[1] 21 15

> dfPersonas[1,] # 1. Registro o fila
  Id Age Name AgeGt20
1  1  21 John    TRUE

> dfPersonas$Name # Acceso por nombre columna
[1] John Dora
Levels: Dora John

División de un DF (submuestra)

> dfSubmuestra <- dfPersonas[dfPersonas$Name == 'John',]
> dfSubmuestra
  Id Age Name AgeGt20 Surname
1  1  21 John    TRUE     Doe

Mezclar dos DFs por un campo común

Supongamos que tenemos otro DF con más datos de los sujetos y ambos DF comparten un campo común (“Name”):

> df2 <- data.frame("Name" = c("John","Dora"),"Colesterol"=c(12.34,34))
> dfNuevo <- merge(dfPersonas,df2)
> dfNuevo
  Name Id Age AgeGt20        Surname Colesterol
1 Dora  2  15   FALSE La exploradora      34.00
2 John  1  21    TRUE            Doe      12.34

Ejercicios

Enlaces

Enlaces externos: