gpt4 book ai didi

r - dplyr inner_join 与字符列上的 NA

转载 作者:行者123 更新时间:2023-12-04 10:30:03 26 4
gpt4 key购买 nike

我有两个相等的数据框

a <- c(1,2,3)
b <- c(3,2,1)
c <- c('a','b',NA)

df1 <- data.frame(a=a, b=b, c=c, stringsAsFactors=FALSE)
df2 <- data.frame(a=a, b=b, c=c, stringsAsFactors=FALSE)

我想用 dplyr::inner_join

"return all rows from x where there are matching values in y, and all columns from x and y" dplyr documentation



(这就是它们相等的一切)但它似乎不适用于 NA在栏目 c (输入 chr )。这是不加入 NA 的标准行为吗? ?

例如
library(dplyr)
> inner_join(df1, df2)
Joining by: c("a", "b", "c")
a b c
1 1 3 a
2 2 2 b

不加入 NA .但是,我希望它返回与 merge 相同的内容
> merge(df1, df2)
a b c
1 1 3 a
2 2 2 b
3 3 1 <NA>

我是不是误会了 inner_join在这种情况下工作,这是否如描述的那样?

更多详情
inner_join匹配 NA在数字列上
a <- c(1,2,3)
b <- c(3,2,NA)
c <- c('a','b','c')

df1 <- data.frame(a=a, b=b, c=c, stringsAsFactors=FALSE)
df2 <- data.frame(a=a, b=b, c=c, stringsAsFactors=FALSE)

> inner_join(df1, df2)
Joining by: c("a", "b", "c")
a b c
1 1 3 a
2 2 2 b
3 3 NA c

编辑

正如@thelatemail 指出的, inner_join也可用作 mergeNA在因子列中
df1 <- data.frame(a=a, b=b, c=c, stringsAsFactors=T)
df2 <- data.frame(a=a, b=b, c=c, stringsAsFactors=T)
inner_join(df1, df2)
Joining by: c("a", "b", "c")
a b c
1 1 3 a
2 2 2 b
3 3 3 <NA>

编辑 2

感谢@shadow 指出这是一个已知问题 herehere

最佳答案

此问题出现在 0.4.1 版本中。现在已在 0.4.2 版中修复:

sessionInfo()
...
other attached packages:
[1] dplyr_0.4.2
...

> inner_join(df1, df2)
Joining by: c("a", "b", "c")
a b c
1 1 3 a
2 2 2 b
3 3 1 <NA>

检查合并:
> merge(df1, df2)
a b c
1 1 3 a
2 2 2 b
3 3 1 <NA>

> all.equal(inner_join(df1, df2), merge(df1, df2))
Joining by: c("a", "b", "c")
[1] TRUE

关于r - dplyr inner_join 与字符列上的 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30520961/

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