我有一个数据框(test_df)和一个查找列表(key)。我想用test使用key替换test_df中的1。 key只有一个列名的子集,而不是相同的顺序。因此,在key(5)中查找“dog”的值,并在test_df中将“dog”列中的1替换为5。
test_df
cat dog monkey bear
1 1 0 2
2 1 1 1
0 2 2 0
键
dog cat bear
5 6 7
期望的输出
cat dog monkey bear
6 5 0 2
2 5 1 7
0 2 2 0
感谢您的帮助。
答案 0 :(得分:3)
我们可以使用Map
和replace
使用'key'列的相应值1>来遍历列。
test_df[names(key)] <- Map(function(x, y) replace(x, x==1, y), test_df[names(key)], key)
test_df
# cat dog monkey bear
#1 6 5 0 2
#2 2 5 1 7
#3 0 2 2 0
答案 1 :(得分:2)
for(f in names(key)){
col.num = which(names(test_df) == f)
test_df[(which(test_df[,col.num] == 1)),col.num] = key[,f]
}