【问题标题】:How to match column attribute in a data table to a column value in a lookup table with R如何使用 R 将数据表中的列属性与查找表中的列值匹配
【发布时间】:2016-11-04 09:39:08
【问题描述】:

这应该很容易,但我想不通。

我有一个包含 N 列的数据表和一个包含两列的查找表:New.Name 和 Number。我想用在查找表中找到的按数字匹配的 New.Name 重命名数据表中的列。并非所有列名都会在查找表中具有 New.Name。数据表中的数字存储为列属性。所以我需要将数据表中的列属性与查找表中Number列中找到的值进行匹配。

例子:

df <- as.data.frame(matrix(sample(1:20), ncol = 5))
colnames(df) <- c('abc', 'def', 'ghi', 'jkl', 'mno')
for (i in 1:5) attr(df[,i], 'Number') <- i

lookup <- data.frame(Number=c(2,3),New.Name=c('x','y'))

按照上面的示例,将列 def 和列 ghi 重命名为 x 和 y 的最佳方法是什么?

【问题讨论】:

    标签: r match apply attr


    【解决方案1】:

    没那么容易......也许这会奏效:

    colnames(df)[sapply(lookup$Number, function(x) which(sapply(df,attr, 'Number')==x))] <- as.character(lookup$New.Name)
    

    【讨论】:

    • 通常最好编辑和取消删除现有答案,而不是输入新答案。
    【解决方案2】:

    我们可以这样做

    names(df)[match(lookup$Number, unlist(lapply(df, attributes)) )] <- as.character(lookup$New.Name)
    names(df)
    #[1] "abc" "x"   "y"   "jkl" "mno"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      相关资源
      最近更新 更多