【发布时间】:2017-05-29 00:14:21
【问题描述】:
我确定我忽略了显而易见的问题,但是我找不到一种方法可以将“查找”表的所有列加入 data.table 非等值联接一步。
我查看了 Arun 的演示文稿 (https://github.com/Rdatatable/data.table/wiki/talks/ArunSrinivasanSatRdaysBudapest2016.pdf) 和多个 SO 问题,但几乎所有这些问题都只涉及更新单个列,而不是加入多个列。
假设我有 2 个 data.tables a 和 b:
library(data.table)
a <- data.table(Company_ID = c(1,1,1,1),
salary = c(2000, 3000, 4000, 5000))
# Company_ID salary
# 1: 1 2000
# 2: 1 3000
# 3: 1 4000
# 4: 1 5000
b <- data.table(cat = c(1,2),
LB = c(0, 3000),
UB = c(3000,5000),
rep = c("Bob","Alice"))
# cat LB UB rep
# 1: 1 0 3000 Bob
# 2: 2 3000 5000 Alice
我最终想要的是将猫、LB、UB、rep(b 中的所有列)与表 a 匹配:
# Company_ID salary cat LB UB rep
# 1: 1 2000 1 0 3000 Bob
# 2: 1 3000 2 3000 5000 Alice
# 3: 1 4000 2 3000 5000 Alice
目前,我设法做到这一点的唯一方法是使用以下两行:
a <- a[b, on = .(salary >= LB, salary < UB), cat := cat]
a[b, on = .(cat == cat)]
它输出所需的表,但看起来很麻烦,一点也不像data.table 方法。任何帮助将不胜感激!
【问题讨论】:
-
旁注:您应该/不需要执行
a <- a[..., ... := ...],因为:=运算符通过引用修改了a。 -
这当然是正确的,谢谢 - 我猜是正常 join X[Y] 语法的习惯
标签: r join data.table