如何使用查找表替换每列中的1

时间:2018-02-08 06:58:54

标签: r indexing

我有一个数据框(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

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

我们可以使用Mapreplace使用'key'列的相应值来遍历列。

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] 
}