使用data.table连接操作分配,多个匹配

时间:2017-01-02 05:13:02

标签: r data.table

我有两个data.tables:

dt1 = data.table(a=c('a','b'))
dt2 = data.table(a=c('a','b','b'))

合并dt1[dt2, on='a']给出了

   a
1: a
2: b
3: b

所以当我执行dt1[dt2, on='a', c:= 1]操作时,我希望

   a c
1: a 1
2: b 1
3: b 1

但我得到了

   a c
1: a 1
2: b 1

为什么会这样?

1 个答案:

答案 0 :(得分:2)

我们需要使用

dt2[dt1, c := 1, on = "a"]
dt2
#   a c
#1: a 1
#2: b 1
#3: b 1

如果我们对更改初始数据集'dt1'不感兴趣,那么

dt1[dt2, c(.SD, c= 1), on = 'a']
#   a c
#1: a 1
#2: b 1
#3: b 1

OP的方法中的问题是在连接之后,赋值(:=)发生在第一个数据集('dt1')中并且它只有2行,因此,赋值的值也将是在那2行而不是3行。一种选择是将其分配给第二个数据集(如第一种方法中所示),或者我们通过连接新列“c”来创建新数据集。