2012-04-06 19 views
9

Normalmente cuando obtienes una columna, es un vector. ¿Cómo puedo mantenerlo como data.frame con los mismos nombres de fila y el nombre de columna correspondiente?cómo obtener cada columna como data.frame (en lugar de un vector) de un data.frame?

+0

posible duplicado de [Matrix 1-dimensional se cambia a un vector en R] (http://stackoverflow.com/questions/9949202/1-dimensional-matrix-is-changed-to-a-vector -in-r) – joran

+0

@joran Lo sentimos, pero no veo el posible duplicado. Dejaré mi respuesta y si esta pregunta se cierra, la eliminación de mi respuesta es un punto discutible. –

+0

@TylerRinker No te preocupes por eso. Esta es solo una pregunta muy común, eso es todo. – joran

Respuesta

13

lugar de llamar a la columna deseada con una coma es decir data.frame [, i] utilizo data.frame [i] para preservar la clase como data.frame y también retener nombres de fila.

data.frame[,i] #As a vector 
data.frame[i] #As a data.frame 
+0

Bien, no sabía que pudieras hacer eso +1 –

+0

Supongo que eso agrega algo de valor a mi publicación de preguntas y merece no ser cerrado :) – RNA

5

utilizan la gota argumento = FALSO como en:

mtcars[, 1, drop = FALSE] 
0

Si especifica un número único cuando subconjuntos de un hoja.de.datos, se obtiene una hoja.de.datos de una sola columna. Esto es diferente al subconjunto de la matriz, que requiere un argumento "faltante" i para devolver la columna completa (que luego se convierte en un vector).

# mtcars is a data.frame 
mtcars[1]  # first column 
str(mtcars[1]) # is still a data.frame 
# 'data.frame': 32 obs. of 1 variable: 
# $ mpg: num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... 
# MTCARS is a matrix 
MTCARS <- as.matrix(mtcars) 
as.matrix(MTCARS)[1]  # only the first element 
# [1] 21 
str(as.matrix(MTCARS)[,1]) # the first column, as a vector 
Named num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... 
- attr(*, "names")= chr [1:32] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" ... 
Cuestiones relacionadas