在看到this post後,@akrun給出了一個很好的答案,我想玩dplyr
。以下是來自post和akrun的示例數據。left_join(x,y)和NA
df = data.frame(
id1 = c(1,1,2,2,2,3,3,3,3),
id2 = c(1,2,1,2,3,1,2,3,4),
X1 = letters[1:9],
X2 = LETTERS[1:9],
stringsAsFactors = FALSE
)
df2 <- data.frame(
id1 = rep(c(1:3), each = 4),
id2 = rep(c(1:4), times = 3),
stringsAsFactors = FALSE
)
如果我複製akrun的答案,merge()
完美的作品在這裏。
df %>%
do(merge(., df2, by = c("id1","id2"), all = TRUE))
id1 id2 X1 X2
1 1 1 a A
2 1 2 b B
3 1 3 <NA> <NA>
4 1 4 <NA> <NA>
5 2 1 c C
6 2 2 d D
7 2 3 e E
8 2 4 <NA> <NA>
9 3 1 f F
10 3 2 g G
11 3 3 h H
12 3 4 i I
然後,我想left_join(x,y)
會做。 left_join(x,y)
包括x
的全部和匹配行y
。從UseR!2014的dplyr
教程pdf中的示例中,我預計會得到相同的結果。但是,情況並非如此。
> df %>%
+ left_join(df2, .)
Joining by: c("id1", "id2")
id1 id2 X1 X2
1 1 1 a A
2 1 2 b B
3 1 3 <NA> <NA>
4 1 4 <NA> <NA>
5 2 1 <NA> <NA>
6 2 2 <NA> <NA>
7 2 3 <NA> <NA>
8 2 4 <NA> <NA>
9 3 1 <NA> <NA>
10 3 2 <NA> <NA>
11 3 3 <NA> <NA>
12 3 4 <NA> <NA>
的前三行表明,dplyr
在做合適的工作。但是,一旦遇到NA
,它會生成NA
s直到結束。這是一個錯誤還是我做錯了什麼?感謝您抽出時間。
另一個比較:' plyr :: join'行爲正確。 – Gregor 2014-09-12 17:45:21