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

标签 r data.table lookup

我想替换 中的值表 中具有相应匹配值的列查找 柱子。我通过 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
..我明白了:
> table
   code sn
1:  CBa  1
2:  CBe  2
3: <NA>  3
4: <NA>  4
5:  OOO  5
6:  PPP  6
7: <NA>  7
但是,我真正希望的是这样的结果:
> table
   code sn
1:  CBa  1
2:  CBe  2
3:  CBa  3
4:  CBe  4
5:  OOO  5
6:  PPP  6
7:  CBa  7
本质上:替换是基于分配了所有值的查找(不仅仅是前两个)。我错过了什么?我曾尝试寻找其他解决方案,但建议似乎并不完全是我想要的。感谢任何答案。

最佳答案

我们可以加入on分别来自表和查找的“代码”和“旧”

table[lookup, code := new, on = .(code = old)]
-输出
 table
   code sn
1:  CBa  1
2:  CBe  2
3:  CBa  3
4:  CBe  4
5:  OOO  5
6:  PPP  6
7:  CBa  7

关于使用 data.table 将表中的列值替换为基于 R 中匹配项的查找值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67908743/

相关文章:

r - 轴标签的基线对齐

r - 按 y 轴上的位置顺序连接 ggplot 中的点

r - 查找 data.table 中的列表是否包含其他列中的单词

使用 dplyr (R) 根据查找表重新编码值

r - 在 R 中如何舍入为 1、1.5、2 等而不是 1、2 或 1.1、1.2、1.3?

r - 为什么在不输入 "Arithmetic"的情况下键入 `?mgcv-faq`时,为什么要引用 `library(mgcv)`的手册页?

r - 根据一个键消除所有重复项+保留一个表中不在另一个表中的记录

r - 函数内多键子集data.table的混淆问题

python - 为什么是 dict.get(key) 而不是 dict[key]?

c - 嵌入式软件 - 为什么查找表中需要 'const'?