如何在Matrix中按名称重命名特定的colname,而不是数字索引?

时间:2015-08-18 14:39:18

标签: 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,将“镁”改为“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

你能告诉我一些解决方法吗?

由于

1 个答案:

答案 0 :(得分:2)

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

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