为什么 data.table::B[A] 和 plyr::join(A,B) return 有不同的结果?
Why does data.table::B[A] and plyr::join(A,B) return different results?
我在 R 中有 2 个数据表
A <- data.table(a = 1:4, b = 12:15)
B <- data.table(a = 2:3, b = 13:14)
使用后
C<-plyr::join(A,B)
它returns
a b
1: 1 12
2: 2 13
3: 3 14
4: 4 15
而当我使用
setkey(A, "a")
setkey(B, "a")
B[A]
它returns
a b i.b
1: 1 NA 12
2: 2 13 13
3: 3 14 14
4: 4 NA 15
为什么两个函数的结果不同?
plyr 正在对所有匹配的变量应用左连接。
Data.table 也在做同样的事情吧?
我们如何使用'data.table'来实现'plyr'给出的结果?
plyr 正在使用两个(所有)列进行连接,data.table 仅使用键控 a
列。
设置相同的键,则结果相同,见:
setkeyv(A, c("a", "b"))
setkeyv(B, c("a", "b"))
B[A]
# a b
# 1: 1 12
# 2: 2 13
# 3: 3 14
# 4: 4 15
这是另一个 data.table
选项:
B[A, .(a, b = i.b)]
a b
1: 1 12
2: 2 13
3: 3 14
4: 4 15
使用 data.table 版本 >= 1.12.4,您可以使用 on=.NATURAL
(请参阅标题为 data.table v1.12.4(2019 年 10 月 3 日)的部分下的新闻项目 10 here)
library(data.table) #above and incl data.table_1.12.4
A <- data.table(a = 1:4, b = 12:15)
B <- data.table(a = 2:3, b = 13:14)
B[A, on=.NATURAL]
输出:
a b
1: 1 12
2: 2 13
3: 3 14
4: 4 15
我在 R 中有 2 个数据表
A <- data.table(a = 1:4, b = 12:15)
B <- data.table(a = 2:3, b = 13:14)
使用后
C<-plyr::join(A,B)
它returns
a b
1: 1 12
2: 2 13
3: 3 14
4: 4 15
而当我使用
setkey(A, "a")
setkey(B, "a")
B[A]
它returns
a b i.b
1: 1 NA 12
2: 2 13 13
3: 3 14 14
4: 4 NA 15
为什么两个函数的结果不同? plyr 正在对所有匹配的变量应用左连接。 Data.table 也在做同样的事情吧? 我们如何使用'data.table'来实现'plyr'给出的结果?
plyr 正在使用两个(所有)列进行连接,data.table 仅使用键控 a
列。
设置相同的键,则结果相同,见:
setkeyv(A, c("a", "b"))
setkeyv(B, c("a", "b"))
B[A]
# a b
# 1: 1 12
# 2: 2 13
# 3: 3 14
# 4: 4 15
这是另一个 data.table
选项:
B[A, .(a, b = i.b)]
a b
1: 1 12
2: 2 13
3: 3 14
4: 4 15
使用 data.table 版本 >= 1.12.4,您可以使用 on=.NATURAL
(请参阅标题为 data.table v1.12.4(2019 年 10 月 3 日)的部分下的新闻项目 10 here)
library(data.table) #above and incl data.table_1.12.4
A <- data.table(a = 1:4, b = 12:15)
B <- data.table(a = 2:3, b = 13:14)
B[A, on=.NATURAL]
输出:
a b
1: 1 12
2: 2 13
3: 3 14
4: 4 15