簡體   English   中英

dplyr inner_join與字符列上的NAs

[英]dplyr inner_join with NAs on character columns

我有兩個相同的數據幀

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

“返回x中匹配值的所有行,x和y中的所有列” dplyr文檔

(它們是相同的一切)但它似乎不適用於列c (類型chr )中的NA 這種標准行為是否不加入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

更多細節

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指出的那樣,當NA在因子列中時, inner_join也可以作為merge

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指出這個是一個已知的問題, 在這里這里

此問題發生在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM