2012-11-13 14 views
7

utworzyć dfrm ramki danych z jednej kolumny, a wprowadzanie nazw rzędu, jak w przykładzie:R Dlaczego wpisanie elementu w ramce danych według nazwy wiersza i nazwy komponentu zwraca NA?

v1 = c(1,2,3) 
dfrm <- data.frame(v1) 
row.names(dfrm) <- c("AD","BP","CD") 

dfrm 
    v1 
AD 1 
BP 2 
CD 3 

można uzyskać dostęp do elementów według nazwy rzędu i wskaźnika:

dfrm$v1[1] 
[1] 1 

można uzyskać dostęp do elementów po wierszu nazwa i nazwa komponentu w cudzysłowie:

dfrm["AD","v1"] 
[1] 1 

Ale dlaczego nie mogę uzyskać dostępu do elementów według nazwy wiersza i nazwy komponentu?

dfrm$v1["AD"] 
[1] NA 

Odpowiedz

5

Odpowiedź jest taka, że ​​wektory nie mają rownames, chociaż mogą mieć nazwy.

W przypadku dostępu do kolumny jako elementu listy, R nie bierze dodatkowy etap przechodzenia wzdłuż rownames do nazw wektora:

> dfrm$v1 
[1] 1 2 3 
> dfrm[["v1"]] 
[1] 1 2 3 
> dfrm[,"v1"] 
[1] 1 2 3 
> dfrm[,1] 
[1] 1 2 3 
> names(dfrm$v1) 
NULL 

Zauważ, że to prawdopodobnie jest dobrą rzeczą, ponieważ przypadki, w których jest to pomocne, są ograniczone, a narzuty do kopiowania nazw za każdym razem, gdy data.frame ma kolumnę wyciągniętą, prawdopodobnie nie jest tego warta.

Jeśli chcesz je skopiować siebie:

> vone <- dfrm$v1 
> names(vone) <- rownames(dfrm) 
> vone 
AD BP CD 
1 2 3 
Powiązane problemy