2015-05-29 15 views
7

來港,我有兩個相同的數據幀dplyr INNER_JOIN與字符列

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那裏有匹配的y值返回所有行,和所有列從x和y「dplyr documentation

(這是一切,因爲它們是平等的),但它似乎並沒有與NAc(類型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上的數字列

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是在比賽NA因子列

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

尼斯的問題,以及提出的例子。有趣的是,'inner_join'在使用存儲爲'factor's的字符數據時也可以正常工作,例如:改變你的第一個例子'df1 $ c < - factor(df1 $ c); df2 $ c < - 因子(df2 $ c); inner_join(df1,df2)' – thelatemail

+0

這是一個已知問題。見[這裏](https://github.com/hadley/dplyr/issues/1022)或[這裏](https://github.com/hadley/dplyr/issues/892) – shadow

+0

謝謝@shadow,我會留意一些問題。 – tospig

回答

0

這個問題在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