合并后,用于合并的列丢失了

时间:2016-05-10 19:58:14

标签: r data.table

如果我在代码下面运行

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

如何获得预期结果?

2 个答案:

答案 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答案会更有效率,该答案会逐列添加。