为什么data.table :: B [A]和plyr :: join(A,B)返回不同的结果?

我在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)

它返回

   a  b
1: 1 12
2: 2 13
3: 3 14
4: 4 15

当我使用

setkey(A,"a")
setkey(B,"a")
B[A]

返回

   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'给出的结果?

masycq 回答:为什么data.table :: B [A]和plyr :: join(A,B)返回不同的结果?

plyr 使用两个(所有)列进行连接, data.table 仅使用键控的a列。

设置相同的键,则结果相同,请参见:

setkeyv(A,c("a","b"))
setkeyv(B,"b"))
B[A]
#    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日)here下的新闻项目10)

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
,

这是另一个Expression<Action<INotifyDataErrorInfo,Program>> test = (source,program) => ErrorsChangedEventManager.AddHandler(source,program.OnError); 选项:

data.table
本文链接:https://www.f2er.com/3167555.html

大家都在问