如果我在代码下面运行
dt<-data.table(col1=c(0,1,2),col2=c("a","b","c"),col3=c("aa","ab","cc"))
setkey(dt,col1)
dt1<-data.table(a=c(1,2))
dt[dt1]
我得到了以下结果
col1 col2 col3
1: 1 b ab
2: 2 c cc
但是,预期的结果是
a col1 col2 col3
1: 0 a aa
2: 1 1 b ab
3: 2 2 c cc
如何获得预期结果?
答案 0 :(得分:5)
如果您正在修改dt
:
dt[dt1, a := i.a][]
# col1 col2 col3 a
#1: 0 a aa NA
#2: 1 b ab 1
#3: 2 c cc 2
如果您不是,请先copy()
。
答案 1 :(得分:1)
您的预期结果与基础R合并不一致 你希望得到LEFT OUTER JOIN,而R base设计用于执行RIGHT OUTER JOIN 解决方案就是交换表。
library(data.table)
dt<-data.table(col1=c(0,1,2),col2=c("a","b","c"),col3=c("aa","ab","cc"))
dt1<-data.table(a=c(1,2))
dt1[dt, .(a = x.a, col1, col2, col3), on = c("a"="col1")]
# a col1 col2 col3
#1: NA 0 a aa
#2: 1 1 b ab
#3: 2 2 c cc
此外,您还必须明确要求x.a
列,这也是由于R基础上的一致性
x.col
中的j
符号最近在data.table 1.9.7版本中实现。您可以{/ 3}}
install.packages("data.table", type = "source",
repos = "https://Rdatatable.github.io/data.table")
但是,如果您不关心更新dt
对象,那么使用@eddi答案会更有效率,该答案会逐列添加。