2013-04-08 13 views
23

Rozważmy ramkę danych z niestandardowymi nazwami rzędu:druku kolumna ramki danych o nazwach rzędu

> data <- data.frame(a=1:3,b=2:4,c=3:5,row.names=c("x","y","z")) 
> data 
    a b c 
x 1 2 3 
y 2 3 4 
z 3 4 5 

Jeśli wybrać więcej niż jedną kolumnę R wyświetla je wraz z nazwiskami rzędu:

> data[,c("a","c")] 
    a c 
x 1 3 
y 2 4 
z 3 5 

Ale jeśli wybiorę tylko jedną kolumnę, R drukuje go jako prosty wektor, bez nazwisk rzędu:

> data[,"c"] 
[1] 3 4 5 

Moje pytanie brzmi: jak mogę powiedzieć R, aby wydrukować jedną kolumnę w ten sam sposób, w jaki drukuje wiele kolumn, tj. z nazwami rzędów?

+2

@ user1981275 Odpowiedź działa, ponieważ podczas tworzenia podzbiorów za pomocą [, "c"], R próbuje uprościć klasę obiektu. Mówiąc mu, żeby go "nie upuszczał", zachowuje twoją klasę data.frame. –

Odpowiedz

32

Można użyć drop argumentu (patrz również ?'['):

data[,"c", drop=FALSE] 

Czy to pomoże?

+0

Tak, dziękuję! –

+0

Jest to podobne do 'podzbioru (dane, select =" c ")', a to generuje jednokolumnową ramkę danych. Czy wiesz, jak zamiast tego uzyskać nazwany wektor znaków? (cc @RomanCheplyaka) –

+0

Mogę myśleć tylko o "zastosuj (dane [," c ", drop = FALSE], 1, c)' ale może jest prostsze rozwiązanie. – user1981275

Powiązane problemy