重命名R中的行和列

Posted

技术标签:

【中文标题】重命名R中的行和列【英文标题】:Renaming rows and columns in R 【发布时间】:2010-12-01 21:03:38 【问题描述】:

我正在运行以下脚本:

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 中重命名表的行?

同样,您将如何重命名该表的列?

【问题讨论】:

【参考方案1】:

有两种简单的方法可以做到这一点:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

不要忘记 plyr 美妙的“重估”和“重命名”命令!

【讨论】:

以上是关于重命名R中的行和列的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中,使用 rle(运行长度编码)的结果,包括命名的行和列标题

数据透视表列重命名

r shiny - DataTableOutput - 颜色特定的行和列

R将特定的行和列乘以常数

使用r自动选择.csv文件中的行和列

如何使用列表重命名熊猫中的列