2009-09-28 26 views
6

biegnę następujący skrypt:Zmiana nazwy wierszy i kolumn w R

cause = c(1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2); 
time = c(1, 1, 2, 3, 3, 2, 2, 1, 1, 2, 2); 
table(cause, time) 

I uzyskać następujące:

time 
cause 1 2 3 
    1 2 2 2 
    2 2 3 0 

Co chcę to:

 time 
cause  1 2 3 
Maltreat 2 2 2 
Non-Maltr 2 3 0 

Moje pytanie brzmi: jak zmienić nazwy wierszy tabeli w R?

W ten sam sposób, w jaki sposób zmieniłbyś nazwy kolumn tego stołu?

Odpowiedz

4

Jednym ze sposobów jest użycie współczynników lub list ciągów zamiast indeksów. Więc:

cause1 <- c("Maltreat", "Non-malt")[cause] 

> print(cause1) 
[1] "Maltreat" "Maltreat" "Maltreat" "Maltreat" "Maltreat" "Non-malt" 
[7] "Maltreat" "Non-malt" "Non-malt" "Non-malt" "Non-malt" 

> table(cause1, time) 
      time 
cause1  1 2 3 
    Maltreat 2 2 2 
    Non-malt 2 3 0 

, aw przypadku martwisz się o pamięć lub prędkości, R jest całkiem dobry reprezentujący tego rodzaju rzeczy skutecznie wewnętrznie, z tylko jednej instancji całego łańcucha przechowywane, a reszta odbywa z indeksami.

Nawiasem mówiąc, będziesz szczęśliwszy w dłuższej perspektywie z ramkami danych:

> df <- data.frame(cause=as.factor(c("Maltreat", "Non-malt")[cause]), time=time) 
> summary(df) 
     cause  time  
Maltreat:6 Min. :1.000 
Non-malt:5 1st Qu.:1.000 
       Median :2.000 
       Mean :1.818 
       3rd Qu.:2.000 
       Max. :3.000 
> table(df) 
      time 
cause  1 2 3 
    Maltreat 2 2 2 
    Non-malt 2 3 0 
5

Istnieją dwa proste sposoby, aby to zrobić:

z <- table(cause, time) 

pomocą colnames/funkcje rownames:

> colnames(z) 
[1] "1" "2" "3" 
> rownames(z) 
[1] "1" "2" 

lub użyj dimnames:

> dimnames(z) 
$cause 
[1] "1" "2" 
$time 
[1] "1" "2" "3" 
> dimnames(z)$cause 
[1] "1" "2" 

W każdym razie, podaj nazwy jako wektor i przypisać je:

> dimnames(z)$cause <- c("Maltreat","Non-malt") 
> z 
      time 
cause  1 2 3 
    Maltreat 2 2 2 
    Non-malt 2 3 0 
1

Nie zapomnij wspaniały „przewartościowania” i „zmiana nazwy” polecenie plyr głównej!

Powiązane problemy