mtcars - ¿Cómo extraigo una sola columna de un data.frame como un data.frame?
r data frame mtcars (2)
Esta pregunta ya tiene una respuesta aquí:
Digamos que tengo un data.frame:
df <- data.frame(A=c(10,20,30),B=c(11,22,33), C=c(111,222,333))
A B C
1 10 11 111
2 20 22 222
3 30 33 333
Si selecciono dos (o más) columnas obtengo un data.frame:
x <- df[,1:2]
A B
1 10 11
2 20 22
3 30 33
Esto es lo que quiero. Sin embargo, si selecciono solo una columna, obtengo un vector numérico:
x <- df[,1]
[1] 1 2 3
He intentado usar as.data.frame (), que no cambia los resultados para dos o más columnas. devuelve un data.frame en el caso de una columna, pero no conserva el nombre de la columna:
x <- as.data.frame(df[,1])
df[, 1]
1 1
2 2
3 3
No entiendo por qué se comporta así. En mi opinión, no debería hacer una diferencia si extraigo una, dos o diez columnas. TI debería siempre devolver un vector (o matriz) o siempre devolver un data.frame (con los nombres correctos). ¿Qué me estoy perdiendo? ¡Gracias!
Omitir el ,
x <- df[1]
A
1 10
2 20
3 30
¿De la página de ayuda de ?"["
:
La indexación por [es similar a los vectores atómicos y selecciona una lista de los elementos especificados.
Un marco de datos es una lista. Las columnas son sus elementos.
Use drop=FALSE
> x <- df[,1, drop=FALSE]
> x
A
1 10
2 20
3 30
De la documentación (vea ?"["
) Puede encontrar:
Si drop = TRUE, el resultado se coacciona a la dimensión más baja posible.