gpt4 book ai didi

r - 为什么inner_join 对data.table 的行为不同?

转载 作者:行者123 更新时间:2023-12-05 01:02:43 24 4
gpt4 key购买 nike

我想使用 dplyr 将数据框与数据表连接起来功能 inner_join() .这是我的代码。

library(data.table)
library(dplyr)

DF <- data.frame(x = rep( c("a","b","c"), each=3),
y = rep( c(1,3,6), 3))

DT <- data.table(x = rep( c("a","b","c"), each=3),
y = rep( c(1,3,6), 3))

W <- data.frame(x = c("b","c","d"),
foo = c(4,2,9))

当我尝试连接两个数据框时, inner_join()按预期工作。
inner_join(DF,W)

Joining by: "x"
x y foo
1 b 1 4
2 b 3 4
3 b 6 4
4 c 1 2
5 c 3 2
6 c 6 2

但是当我尝试将数据框与数据表连接时, inner_join()给出意想不到的结果。
inner_join(DT,W)

Joining by: "x"
x y foo
1 b 1 2
2 b 3 2
3 b 6 2
4 c 1 9
5 c 3 9
6 c 6 9

谁能给我一些提示,为什么会发生这种情况?在此先感谢您的时间。

注:我在 MAC Maverick OS X 10.9.4 和 sessionInfo() 上使用 RStudio 版本 0.98.1056是
R version 3.1.1 (2014-07-10)
Platform: x86_64-apple-darwin13.1.0 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats graphics grDevices utils datasets methods base

other attached packages:
[1] dplyr_0.2 data.table_1.9.2

loaded via a namespace (and not attached):
[1] assertthat_0.1 parallel_3.1.1 plyr_1.8.1 Rcpp_0.11.2 reshape2_1.4
[6] stringr_0.6.2 tools_3.1.1

最佳答案

David 提到的 bug in data.table factor 列和 character 列之间的值是 true,但仍未修复。但不幸的是它是一个 红鲱鱼并且是 不是 你烦恼的根源。

但是,这是因为没有 inner_join.data.table dplyr v0.2 中的方法,因此它调用 inner_join.data.frame方法(因为 data.table 也是 data.frame )。

require(dplyr) ## 0.2 CRAN
require(data.table) ## 1.9.2

methods(inner_join)
# [1] inner_join.data.frame* inner_join.tbl_df* inner_join.tbl_dt*
# [4] inner_join.tbl_sql*

因此,当您这样做时:
inner_join(DF, W)

或者
inner_join(DT, W)

两者都调用相同的 dplyr's内部连接实现。

它给出不同结果的原因是因为 DFW两者都有 x作为因子和 DTx作为字符列。

您可以通过更改 DF$x 来重现此错误。字符类型:
DF$x = as.character(DF$x)
inner_join(DF, W)
# Joining by: "x"
# x y foo
# 1 b 1 2
# 2 b 3 2
# 3 b 6 2
# 4 c 1 9
# 5 c 3 9
# 6 c 6 9

不过这个好像在 dplyr的开发版中已经修复了.

关于r - 为什么inner_join 对data.table 的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25963324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com