首页 > 解决方案 > R: data.table: := 在相反的情况下

问题描述

假设我有两个要左连接的数据集,

i <- data.table(id=1:3, k=7:9, l=7:9, m=7:9, n=7:9)

x <- data.table(id=c(1,2), x=c(10,20))

要左连接,保留所有行i,我执行

x[i, .(id=i.id, k=i.k, l=i.l, m=i.m, n=i.n, x=x.x), on=.(id=id)]

但我想知道是否有一种更简单、更有效的方法可以让您不必拼出i.

例如,在相反的情况下(即,当我想保留所有列时i),我可以使用:=运算符,如x[i, k:=i.k, on=.(id=id)]. 我的理解是,这也使事情变得更有效率,因为不需要复制列。这种情况有可比性吗?

标签: rperformancedata.tableleft-join

解决方案


您可以在加入后使用数据表setcolorder()..

setcolorder( x[i, on = "id"], c( names(i), "x" ) )

#    id k l m n  x
# 1:  1 7 7 7 7 10
# 2:  2 8 8 8 8 20
# 3:  3 9 9 9 9 NA

推荐阅读