我有一个数据框,如下所示:
test <- data.frame(x=c('a','b','a','c','a','b','d'),y=rep('test',7),stringsAsFactors = FALSE)
test
x y
1 a test
2 b test
3 a test
4 c test
5 a test
6 b test
7 d test
现在,我想定义一个映射,例如
mapping <- list(a=1,b=2,c=3,d=4)
mapping
$a
[1] 1
$b
[1] 2
$c
[1] 3
$d
[1] 4
我想要的是批量更新我的数据框创建一个新的变量z
,这样无论何处找到'a',变量z
根据映射设置为值1(如果更简单,可以以任何其他方式定义映射或者更好的解决方案)。
我的最终结果应该是:
x y z
1 a test 1
2 b test 2
3 a test 1
4 c test 3
5 a test 1
6 b test 2
7 d test 4
我们可以使用stack
和merge
merge(test, stack(mapping), by.x = 'x', by.y = 'ind')
最好有一个名为vector
的直接映射。在这种情况下,我们unlist
list
到vector
并使用它来匹配'x'中的值
test$z <- unlist(mapping)[test$x]