2014-09-12 4 views
2

@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이 생성됩니다. 이 버그입니까? 아니면 내가 잘못 했나요? 시간을 내 주셔서 감사합니다.

+0

또 다른 비교를' plyr :: join'가 올바르게 작동합니다. – Gregor

답변

1

현재 dplyr에 몇 가지 버그와 _join 기능이 있습니다 그들은 고정되어있는 것처럼

내가 보인다. 당신이 그룹에 의한 변수는 동일한 유형 있는지 확인하면 그 동안, (그들은 당신의 예에없는 - 당신이 str()를 사용하여 알 수 있습니다) 다음 작동합니다 :

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 = as.numeric(rep(c(1:3), each = 4)), 
    id2 = as.numeric(rep(c(1:4), times = 3)), 
    stringsAsFactors = FALSE 
) 

left_join(df2, df) 
+0

지원해 주셔서 감사합니다. 나는 당신의 생각을 시험해 보았다. '_join()'이'merge()'처럼 정수와 숫자를 취할 수 있다면 좋을 것입니다. – jazzurro

+0

해들리와 팀이 작업 중입니다. 0.3 버전이 출시되면 이러한 문제가 해결 될 것으로 기대됩니다. – rrs

+0

좋습니다. 업데이트 주셔서 감사합니다! – jazzurro

관련 문제