我需要将一些data.table合并到另一个data.table,我知道我可以 将一个data.table中的字段注入到另一个中,如下所示:
df1 <- data.table(Id = letters[1:5],a = 1:5)
df2 <- data.table(Id = letters[1:3],a = 7:9,b=7:9)
setkey(df1,Id)
setkey(df2,Id)
df1[df2,b:=b][]
#> Id a b
#> 1: a 1 7
#> 2: b 2 8
#> 3: c 3 9
#> 4: d 4 NA
#> 5: e 5 NA
但是当df1
df1[df2,a:=a][]
#> Id a
#> 1: a 1
#> 2: b 2
#> 3: c 3
#> 4: d 4
#> 5: e 5
我知道df1在此分配中未更改,因为字段a
已存在
df1
以及作业右侧对a
的引用
解析为该值,而不是df2
中的on。那么我该如何更换呢?
df1$a
中的所选值与df2$a
中的值一起显示以下内容:
#> Id a
#> 1: a 7
#> 2: b 8
#> 3: c 9
#> 4: d 4
#> 5: e 5
答案 0 :(得分:4)
在传递i.
来电的RHS时使用:=
前缀。
library(data.table)
df1 <- data.table(Id = letters[1:5],a = 1:5)
df2 <- data.table(Id = letters[1:3],a = 7:9,b=7:9)
df1[df2,a:=i.a][]
这在1.9.7中的?data.table
中有记录。
高级:当i是data.table时,可以通过使用前缀i来在j中引用i的列,例如,X [Y,。(val,i.val)]。这里val指的是X的列和i.val Y的。