【问题标题】:How to rename a specific colname by name in a Matrix, rather than numerical index?如何在矩阵中按名称重命名特定列,而不是数字索引?
【发布时间】:2015-11-11 13:43:01
【问题描述】:

我有很多来自不同网站的数据。因此,我想重命名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,将“镁”改成“镁”,将“锌”改成“锌”。

当我使用数字索引时,它可以完美运行:

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

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

谢谢

【问题讨论】:

  • 您可能需要使用%in%matchcolnames(mdat)[colnames(mdat) %in% c('Zinc', 'Magnesium')] &lt;- c('Zn', 'Mg') 还有match 会更准确

标签: r matrix rename


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 2015-06-17
    • 2013-04-17
    • 2017-08-03
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 2018-01-25
    相关资源
    最近更新 更多