@akrun의 멋진 답변으로 this post을 본 후 dplyr
으로 게임을하고 싶었습니다. 다음은 게시물과 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
)
나는 대답을 복제하면 여기에서 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
이 생성됩니다. 이 버그입니까? 아니면 내가 잘못 했나요? 시간을 내 주셔서 감사합니다.
또 다른 비교를' plyr :: join'가 올바르게 작동합니다. – Gregor