2012-04-06 15 views
9

Normalerweise, wenn Sie eine Spalte erhalten, ist es ein Vektor. Wie kann ich es als data.frame mit den gleichen Zeilennamen und dem entsprechenden Spaltennamen behalten?Wie bekomme ich jede Spalte als data.frame (anstelle eines Vektors) von einem data.frame?

+0

mögliche Duplikat von [1-dimensionale Matrix zu einem Vektor in R geändert wird] (http://stackoverflow.com/questions/9949202/1-dimensional-matrix-is-changed-to-a-vector -in-r) – joran

+0

@joran Sorry hat das mögliche Duplikat nicht angezeigt. Ich werde meine Antwort verlassen und wenn diese Frage abgeschlossen ist, ist die Entfernung meiner Antwort ein strittiger Punkt. –

+0

@TylerRinker Mach dir keine Sorgen. Dies ist nur eine wirklich häufige Frage, das ist alles. – joran

Antwort

13

Statt die gewünschten Spalt des Anrufers mit einem Komma d.h. data.frame [i] verwenden data.frame [i] die Klasse als data.frame zu bewahren und auch Zeilennamen beizubehalten.

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

Schön, ich wusste nicht, dass du das tun könntest +1 –

+0

Ich schätze, das fügt meinem Frage-Post etwas Wert hinzu und verdient es nicht, geschlossen zu werden :) – RNA

5

das Argument Tropfen = FALSCH wie in verwenden:

mtcars[, 1, drop = FALSE] 
0

Wenn Sie eine einzelne Nummer angeben, wenn ein data.frame subsetting, erhalten Sie eine einspaltige data.frame. Dies unterscheidet sich von der Matrix-Teilmenge, die ein "fehlendes" i-Argument erfordert, um die gesamte Spalte zurückzugeben (die dann in einen Vektor konvertiert wird).

# 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" ... 
Verwandte Themen