使用自定义映射批量更新数据框的惯用方法是什么?

问题描述 投票:1回答:1

我有一个数据框,如下所示:

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
r
1个回答
4
投票

我们可以使用stackmerge

merge(test, stack(mapping), by.x = 'x', by.y = 'ind')

最好有一个名为vector的直接映射。在这种情况下,我们unlist listvector并使用它来匹配'x'中的值

test$z <- unlist(mapping)[test$x]
© www.soinside.com 2019 - 2024. All rights reserved.