簡體   English   中英

重命名R中的行和列

[英]Renaming rows and columns in 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中表的行?

同樣,你如何重命名該表的列?

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

z <- table(cause, time)

使用colnames / rownames函數:

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

或者使用dimnames:

> 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

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

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

不要忘記plyr精彩的“重估”和“重命名”命令!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM