【发布时间】:2014-11-15 18:49:20
【问题描述】:
我想使用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 上使用 RStudio 版本 0.98.1056,sessionInfo() 是
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
【问题讨论】:
-
这是因为
data.table中的一个错误导致将character类与factor类合并时导致错误结果。尝试将DT更改为DT <- data.table(x = factor(rep( c("a","b","c"), each=3)), y = rep( c(1,3,6), 3)),然后再次尝试inner_join(DT,W) -
感谢@DavidArenburg,您的评论解决了我的问题。
-
要清楚一点,而@DavidArenburg 的评论(部分)是正确的,因为当
x的键列是一个因素并且对应的i的列是字符时,x[i]返回结果不正确(这是 data.table 中的一个错误),它是一个 red herring,与您的示例无关。而是由于dplyr中的一个错误,此后该错误已得到修复。
标签: r inner-join data.table dplyr