data.table:从具有相同名称的字段替换现有值

时间:2016-04-01 23:20:02

标签: r data.table

我需要将一些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

1 个答案:

答案 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的。