2016-09-14 2 views
2

가끔은 dplyr 체인 내에서 데이터 프레임을 (일반적으로 수정 된) 자체 버전에 조인해야합니다. 이런 식으로 :dplyr 체인 내에서 데이터 프레임을 자체에 가입시키는 방법은 무엇입니까?

df <- data.frame(
    id = c(1,2,3) 
    , status = c('foo','bar','meh') 
    , spouseid = c(4,3,2) 
) 


df %>% 
    filter(status == 'foo' | status == 'bar') %>% 
    # join the filtered table to itself using the dot as the right-hand side 
    left_join(., by = c('id' = 'spouseid')) 

내가 이것을 시도하면 Error in is.data.frame(y) : argument "y" is missing, with no default이됩니다.

+0

원본 데이터 프레임을 수정 된 데이터 프레임에 결합 하시겠습니까? 그렇다면 조인 라인은 원래의 데이터 프레임을 rhs에 넣을'left_join (df, by = c ('id'= 'spouseid'))'일 수 있습니다. 최종 결과에서 원하는 행에 따라이 값을'right_join' 또는'full_join'으로 변경할 수 있습니다. – eipi10

+0

체인을 끊을 필요없이 편집 된 데이터 프레임을 자체에 가입시키는 데 가장 관심이 있습니다. 과거에는 항상 편집을 먼저하고 새로운 객체에 저장 한 다음 조인을 수행하거나 y 인수에서 조인 자체 내에서 동일한 편집을 수행했습니다. – crazybilly

답변

4

문제는 도트를 왼쪽면 주위로 움직이면 위의 방법으로 lhs가 left_join()으로 전달된다는 것입니다. 모두 왼쪽 및 오른쪽 측면의 점을 사용하려면, 두 번 점을 사용

df %>% 
    filter(status == 'foo' | status == 'bar') %>% 
    # the first dot is x argument and the second dot is the y argument 
    left_join(
     x = . 
    , y = . 
    , by = c('id' = 'spouseid') 
) 

이 방법, 당신은 left_join()의 두 인수에 좌를 전달하는 대신 당신처럼 magrittr의 암시 좌에 의존하기보다는 일반적으로.

+0

'x ='와'y ='를 삭제하고'left_join (.,., by = c ('id'= 'spouseid'))'를 사용할 수도 있습니다. – steveb