3 回答
TA贡献1880条经验 获得超4个赞
引用data.table FAQ 1.11 X[Y]和之间有什么区别merge(X, Y)?
X[Y] 是联接,使用Y(或Y的键,如果有的话)作为索引查找X的行。
Y[X] 是一个联接,使用X(或X的键,如果有的话)查找Y的行
merge(X,Y)同时执行两种方式。X[Y]和的行数Y[X]通常不同,而merge(X,Y)和返回的行数merge(Y,X)相同。
但是错过了要点。大多数任务需要在连接或合并后对数据执行某些操作。为什么合并所有数据列,然后只使用它们的一小部分?您可能会建议 merge(X[,ColsNeeded1],Y[,ColsNeeded2]),但这要求程序员确定需要哪些列。X[Y,jdata.table中的]为您完成所有这些工作。在编写时X[Y,sum(foo*bar)],data.table会自动检查j表达式以查看其使用的列。它只会将这些列作为子集;其他被忽略。仅为j使用的列创建内存,并且Y列在每个组的上下文中均享受标准的R回收规则。假设fooin中X,bar在中Y(以及中的20个其他列Y)。是不是X[Y,sum(foo*bar)] 比合并所有浪费的子集更快地编写程序和更快地运行?
如果您想要左外连接 X[Y]
le <- Y[X]
mallx <- merge(X, Y, all.x = T)
# the column order is different so change to be the same as `merge`
setcolorder(le, names(mallx))
identical(le, mallx)
# [1] TRUE
如果要完全外部联接
# the unique values for the keys over both data sets
unique_keys <- unique(c(X[,t], Y[,t]))
Y[X[J(unique_keys)]]
## t b a
## 1: 1 NA 1
## 2: 2 NA 4
## 3: 3 9 9
## 4: 4 16 16
## 5: 5 25 NA
## 6: 6 36 NA
# The following will give the same with the column order X,Y
X[Y[J(unique_keys)]]
- 3 回答
- 0 关注
- 574 浏览
添加回答
举报