r - 如何按矩阵中的名称而不是数字索引重命名特定列?

标签 r matrix rename

我有很多来自不同站点的数据。因此,我想重命名 colnames 选择变量名称而不是矩阵中的数字位置。这是来自一个站点的矩阵的想法:

mdat <- matrix(c(rnorm(5,100), rnorm(5, 15), rnorm(5, 0.5), rnorm(5,0.1), rnorm(5,40)), nrow = 5, ncol = 5, byrow = F,
                dimnames = list(c(2011:2015), c("Pre", "Temp", "Magnesium", "Zinc", "Hum")))

然后我只想按名称重命名特定的colnames,即“Magnesium”为“Mg”,“Zinc”为“Zn”。

当我使用数字索引时,它工作得很好:

colnames(mdat)[3:4] <- c("Zn", "Mg")

但我想知道如何通过列名执行相同的操作,因为在我的不同矩阵中,这些变量位于不同的列位置。我尝试了一下,但出现错误:

colnames(mdat)[c("Zinc", "Magnesium")] <- c("Zn", "Mg")

Error in `colnames<-`(`*tmp*`, value = c("Pre", "Temp", "Magnesium", "Zinc",  : 
  length of 'dimnames' [2] not equal to array extent

你能告诉我一些解决这个问题的方法吗?

谢谢

最佳答案

我们可以使用match来获取向量元素的数字索引(c('Zinc', 'Magnesium') ) 列名称中。使用它来对列名称进行子集化并替换为相应的向量 (c('Zn', 'Mg'))。

 indx <- match(c('Zinc', 'Magnesium'), colnames(mdat))
 colnames(mdat)[indx] <- c('Zn', 'Mg')

关于r - 如何按矩阵中的名称而不是数字索引重命名特定列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32075485/

相关文章:

r - 如何在R中的图例中交换标签和符号?

r - 尝试在 centos 7 服务器上安装 Cairo R 包时出错

r - 最大似然估计量的准确性

linux - 在使用 --files-from 复制期间使用 rsync 重命名文件?

JavaScript:对象重命名键

r - 如何显示列表的元素

python - 如何使用 Sympy 推导矩阵元素

c - 矩阵生成器 - C 中的段错误

Matlab 向量乘以元胞数组

linux - bash 重命名空间 - 也做子文件和文件夹