Es una estructura de datos que permite representarla en forma tabular, como una hoja de datos. Cada fila representa a la descripción de un elemento de la tabla y cada columna representa un atributo del elemento, representada por una variable. Por ejemplo, en el caso de un registro de 50 alumnos de un curso, cada alumno ocupa una fila. Si de cada uno de ellos tenemos su código, edad, altura, peso, etc. Cada uno de estos atributos constituye una columna.
En el caso del objeto iris se cuenta con una muestra de 150 flores conteniendo la altura y longitud de sus sépalos y pétalos y tipo de flor.
>head(iris)
Se diferencia de una matriz pues ésta es simplemente un arreglo rectangular de números y cuyas filas no tienen distinción. Un data frame, es similar a una lista, aunque ésta es un objeto mucho más complejo. En algunos casos, un data frame puede ser una matriz. Una lista es un contenedor y como tal puede contener una lista, una matriz, etc.
Ejemplo 1
En el siguiente ejemplo definiremos el dataframe info que contendrá una muestra de 10 personas conteniendo su edad, género, monto de dinero que tenían al momento de la encuesta, y el número de minutos que habían hablado hasta ese momento.
>edad = c(22, 23, 24, 25, 30, 23, 22, 24, 25, 25)
>tiempo = c(14.21, 10.36, 11.89, 13.81, 12.03, 10.99, 12.48, 13.37, 12.29, 11.92)
>soles=sample(5:200,10)
>genero = c("M","H","H","M","M","H","M","M","H","H")
Generemos el data frame:
>info=data.frame(edad,soles,tiempo,genero)
Los nombres de las variables o columnas:
>names(info)
>str(info)
Observamos que disponemos de una tabla cuya estructura contiene tres variables numéricas y una de tipo factor o categórica (variable cualitativa).
Si deseamos listar una determinada columna, podemos usar una de las siguientes formas:
>info[,3]
>info$tiempo
>info[,”tiempo”]
>info[[“tiempo”]]
Podemos encontrar la media, varianza y coeficiente de variación de una variable numérica:
>mean(info[,3])
>var(info[,3])
>sqrt(var(info[,3]))/mean(info[,3])
Función attach()
Si deseamos usar las variables, debemos usar
>info$edad
>info$genero
Etc.
Siempre precedido del nombre del data.frame que lo contiene. Y, para un cálculo pequeño, puede resultar, molesto.
>mean(info$soles)
>var(info$tiempo)
> mean(info$genero=="M")
La generación de tablas de frecuencias:
>table(info$tiempo)
>table(info$soles,info$genero)
La función attach() permite separar o desligar las variables del data.frame.
Usando la función attach():
>edad
>genero
>mean(soles)
>var(tiempo)
>mean(genero==”M”)
>table(tiempo)
>table(soles,genero==”M”)
Si para obtener un determinado estadístico se requiere el cálculo previo de otras, es útil el uso de with. En este caso, no es necesario el uso previo de la función attach().
>with (info,{
m = mean(soles)
v=var(soles)
cv=sqrt(soles)/m
cv
})
Subconjuntos de un data frame
La función subset() permite obtener parte de un data.frame.
> h=subset(info,genero=="H")
¿Quiénes hablaron más tiempo por teléfono?
> mas=subset(info,tiempo>mean(tiempo))
>mas
¿Quiénes son los mayores de 25 años?
>may=subset(info,edad>25)
Los que tienen menos de 23 o más de 25 años:
> mm = subset(info,edad>22&edad<26)
Hombres con más de 120 soles:
> mm = subset(info,genero=="H" & soles>120)
Ejemplo 2
Ahora vamos a intentar crear una tabla de contingencia.
Borremos todas las variables
> rm(list=ls())
Limpiemos la pantalla
>
Vamos a crear una estructura de datos con data.frame en el objeto(variable) datos
>datos = data.frame( # presionamos [Intro]
estatura=c(1.75,1.68,1.85,1.64,1.70,1.58,1.65,1.66,1.68,1.73,1.78,1.85),
peso=c(78,68,90,88,85,68,70,65,84,90,110,85),
craprob=c(128,145,132,140,152,120,118,80,128,130,145,120),
genero=c("M","M","F","M","M","F","F","M","F","F","M","M"),
celapple=c("S","N","N","N","S","S","S","N","N","N","N","N"),
gastosem=c(320,100,540,350,220,820,1200,860,200,100,80,210),
row.names=c("Carlos","Cesar","Telvi","Miguel","Malcom","Fedra","Fyona","Pedro","Tania", "Sandra","Marco","Polo"))
> datos
Un resumen sería interesante
>summary(datos)
Si tuviéramos que añadir otra variable:
> datos$curaprob=c(30,40,35,42,48,28,27,17,28,36,37,30)
Veamos un gráfico de caja para la variable gastos
>boxplot(datos$gastosem)
Para dos variables
> plot(craprob~genero,data=datos)
Continuaremos en la siguiente sesión