这应该是容易的,但我无法弄清楚。
我有一个包含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的最佳方法是什么?
答案 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)