【发布时间】:2014-11-09 15:44:28
【问题描述】:
这不是故意的吗?这是dplyr 功能的其他部分发生的事情吗?我应该担心吗?我喜欢这种表现,讨厌data.table 语法。是否有替代 dplyr 和 data.table 目前可以安全使用并且仍然具有高性能的替代品?
A <- structure(list(ORDER = c(30305720L, 30334659L, 30379936L,
30406397L, 30407697L, 30431950L),
COST = c("0", "", "11430.52", "20196.279999999999", "0", "10445.99")),
.Names = c("ORDER", "COST"),
row.names = c(NA, 6L),
class = "data.frame")
B <- structure(list(ORDER = c(30334659, 30379936, 30406397, 30407697, 30431950),
AREA = c(0, 2339, 2162, 23040, 475466)),
.Names = c("ORDER", "AREA"),
row.names = c(4L, 8L, 11L, 12L, 15L),
class = c("tbl_df", "tbl", "data.frame"))
垃圾结果:
left_join(A, B)
ORDER COST AREA
1 30305720 0 NA
2 30334659 NA
3 30379936 11430.52 NA
4 30406397 20196.279999999999 NA
5 30407697 0 NA
6 30431950 10445.99 NA
效果:
merge(A, B, all.x=T, all.y=F)
ORDER COST AREA
1 30305720 0 NA
2 30334659 0
3 30379936 11430.52 2339
4 30406397 20196.279999999999 2162
5 30407697 0 23040
6 30431950 10445.99 475466
【问题讨论】:
-
我使用的是 R 版本 3.1。
-
请注意,
data.table语法setDT(A);setDT(B);setkey(A,ORDER);setkey(B,ORDER);A[B]用于提供“有效结果”。data.table使键/分组在机器容差范围内相等。 -
如果合并 did 失败并给您错误的结果,而您将它们显示在任何地方,那将是 您的 错。