我有两个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
为什么会这样?
答案 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”来创建新数据集。