2009-09-28 66 views
6

我運行下面的腳本:重命名的行和列中的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) 

而且我得到以下幾點:

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

我想是這樣的:

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

所以,我的問題是:你如何重命名R表中的行?

以同樣的方式,你將如何重命名該表的列?

回答

4

一種方法是使用因子或字符串列表而不是索引。所以:

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 

而且,如果你擔心內存或速度,R是代表這種事情有效內部,存儲整個字符串只有一個實例相當不錯,剩下的做與索引。

順便說一句,你會從長遠來看,更快樂的數據幀:

> 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

有兩種簡單的方法可以做到這一點:

z <- table(cause, time) 

使用colnames/rownames功能:

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

或使用模糊名稱:

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

在任何情況下,選擇你的名字作爲載體,並將其分配:

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

不要忘記plyr的精彩「人民幣升值」和「重命名」命令!