使用 data.table 将表中的列值替换为基于 R 中匹配项的查找值

Efe*_*ano 4 lookup r data.table

我想用查找列中匹配的相应值替换表列中的值。我通过 data.table 包“通过引用分配”实现了这一点,一个接一个地取一个值(并且它的替换),但我认为我可以做一些更模块化的事情。

总之,我这样做:

# Build a table and a lookup
code<- c("ABC","EBC","ABC","EBC","OOO","PPP","ABC")
sn <- c(1:7)
old<- c("ABC","EBC")
new<- c("CBa","CBe")

lookup <- data.frame(old,new)
table <-data.frame(code,sn)

# Set data.table as TRUE for both
setDT(table)
setDT(lookup)

# Attempt reassignment
table[code %in% lookup$old, code := lookup$new[which(lookup$old==code)]]
table
Run Code Online (Sandbox Code Playgroud)

..我明白了:

> table
   code sn
1:  CBa  1
2:  CBe  2
3: <NA>  3
4: <NA>  4
5:  OOO  5
6:  PPP  6
7: <NA>  7
Run Code Online (Sandbox Code Playgroud)

然而,我真正希望的是这样的结果:

> table
   code sn
1:  CBa  1
2:  CBe  2
3:  CBa  3
4:  CBe  4
5:  OOO  5
6:  PPP  6
7:  CBa  7
Run Code Online (Sandbox Code Playgroud)

本质上:替换是基于分配了所有值(不仅仅是前两个)的查找进行的。我错过了什么?我曾尝试寻找其他解决方案,但建议似乎并不是我正在寻找的。感谢任何答案。