r - Left_join by reference for data.table 的重复键
问题描述
数据:
library(data.table)
A <- data.table(id = letters[1:10], amount = rnorm(10)^2)
B2 <- data.table(
id = c("c", "d", "e", "e"),
ord = 1:4,
comment = c("big", "slow", "nice", "nooice")
)
我正在尝试按照此解决方案使用 data.table 通过引用进行左连接:
A[B2, on = .(id), names(B2)[2:3] := mget(paste0("i.", names(B2)[2:3]))]
这导致以下输出:
id amount ord comment
a 0.10210291 NA NA
b 0.01255382 NA NA
c 0.83172798 1 big
d 0.18312460 2 slow
e 0.98596235 4 nooice
f 0.78437310 NA NA
g 6.34467810 NA NA
h 1.12852702 NA NA
i 0.23695322 NA NA
j 0.48943532 NA NA
B2 data.table 中有一个重复的“e”,所以我希望最终输出中有一个额外的行,当我使用 dplyr 的 left_join 时,我确实得到了这一行(忽略“amount”列中随机数的差异):
left_join(A, B2, by = "id")
id amount ord comment
a 0.4778922 NA NA
b 1.4659516 NA NA
c 0.7857094 1 big
d 0.6697439 2 slow
e 0.2903246 3 nice <-
e 0.2903246 4 nooice
f 6.8514519 NA NA
g 1.7866884 NA NA
h 0.9687253 NA NA
i 0.7872538 NA NA
j 2.0517777 NA NA
如何通过 data.table 通过引用产生相同的输出?
解决方案
推荐阅读
- vue.js - TypeError:基于 Nuxt 的生产版本
- tensorflow-federated - TFF trainer.next 不可调用
- php - 如何使用 Treebuilder 在 Bundleless 应用程序中加载自定义配置文件?
- mongodb - 如何按 MongoDB 中的特定字段对文档进行分组
- java - Spring:为什么用@PostConstruct注解的方法不能是静态的?
- angular - 提交表单时如何(仅)触发表单验证?
- google-cloud-functions - 我可以授予 cloudfunctions.functions.call 特定功能吗?
- python-3.x - TensorFlow 添加大数
- ansible-inventory - Ansbile OCI 集合 - 库存插件
- java - Micronaut 忽略客户端接受的内容类型