2012-04-06 17 views
9

Normalmente quando si ottiene una colonna, è un vettore. Come posso mantenerlo come data.frame con gli stessi nomi di riga e il nome della colonna corrispondente?come ottenere ogni colonna come data.frame (anziché un vettore) da un data.frame?

+0

possibile duplicato [Matrix 1-dimensionale viene modificato in un vettore in R] (http://stackoverflow.com/questions/9949202/1-dimensional-matrix-is-changed-to-a-vector -in-r) – joran

+0

@joran Spiacente, non ho visto il possibile duplicato. Lascerò la mia risposta e se questa domanda è chiusa la rimozione della mia risposta è un punto controverso. –

+0

@TylerRinker Non preoccuparti. Questa è solo una domanda molto comune, tutto qui. – joran

risposta

13

Invece di chiamare colonna desiderata con una virgola cioè data.frame [, i] uso data.frame [i] per preservare la classe come data.frame e anche conservare nomi di riga.

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

Bello, non sapevo che potessi farlo +1 –

+0

Immagino che aggiunga un po 'di valore alla mia domanda posta e meriti di non essere chiuso :) – RNA

5

Utilizzare il menu argomento = FALSE come in:

mtcars[, 1, drop = FALSE] 
0

Se si specifica un singolo numero quando sottoinsiemi un data.frame, si ottiene un data.frame una colonna. Questo è diverso dal subset matrice, che richiede un argomento "mancante" i per restituire l'intera colonna (che poi converte in un vettore).

# 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" ... 
Problemi correlati