我想要实现的是类似于 SQL
select *
from T left join
T2 on T1.key2 = T2.key2
left join T3 on T1.key3 = T3.key3
但在 R 中使用 data.table
。具体来说,将 T2 的两列和 T3 的一列“附加”到第一个表。
我目前的解决方案看起来像
setkey(t1,key2)
t1 <- t2[t1]
setkey(t1,key3)
t1 <- t3[t1]
setkey(t1,key1) # restore the original key
这会将整个 t1 复制两次,而且不会太快。在“内部”t1 是一个相当大的数据集 ~ 100 万行,而 t2 和 t3 只是小的“映射”表。
我认为使用 J(..)
会有所帮助,但我是 data.tables 的新手,无法真正理解如何在此处应用它。
有人可以建议一个更快的加入解决方案吗?谢谢
最佳答案
自 devel version of data.table, v1.9.5最近实现了一项无需使用新的 on
参数设置键即可直接加入 data.tables 的功能,我可以为您的问题提供高质量的答案:
t1[t2, colT2 := i.colT2, on = c(key2="key2")
][t3, colT3 := i.colT3, on = c(key3="key3")
][]
它还应该保留 t1
上的原始 key 。
关于sql - 快速 SQL Join-like 将列添加到 R 中的 data.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30934125/