如何将数据表中的列属性与R中的查找表中的列值进行匹配

时间:2016-07-01 22:17:19

标签: r match apply attr

这应该是容易的,但我无法弄清楚。

我有一个包含N列的数据表和一个包含两列的查找表:New.Name和Number。我想使用在Number中匹配的查找表中找到的New.Name重命名数据表中的列。并非所有列名都将在查找表中具有New.Name。数据表中的数字存储为列属性。所以我需要将数据表中的column属性与查找表中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的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

我们可以通过

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

答案 1 :(得分:0)

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

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