2016-08-08 4 views
1

그룹을 해제 변수 나 데이터베이스 (user_reg) 고객의 정보 (customer_id)를 포함하는이 잎, 자신의 등록일 (reg_date2)과 주문 날짜 (order_date2, 고객 당 자주> 1).dplyr :: GROUP_BY이

나는 첫 번째 순서가 발생한 경우) 일을 알고 싶어하고 2) 독특한 user_id, reg_date2first_ordertbl와 끝까지.

user_reg %>% select(user_id, reg_date2, order_date2) %>% 
    group_by(user_id) %>% 
    mutate(first_order=min(order_date2)) %>% 
    select(user_id, reg_date2, first_order) %>% 
    arrange(user_id) %>% 
    group_by(user_id) 

아래의 코드를 실행 한 후 나는 아직도 user_id 당 여러 행을 얻을.

user_id reg_date2 first_order 
    <int>  <date>  <date> 
1  -1 2015-11-03 2015-11-25 
2  1 2013-10-24 2014-10-11 
3  1 2013-10-24 2014-10-11 
4  1 2013-10-24 2014-10-11 
5  1 2013-10-24 2014-10-11 
6  1 2013-10-24 2014-10-11 

어떤 문제를 해결할 수 있습니까?

+0

이'대신'mutate'의 summarize'위한 작업 같은데? – aosmith

+0

내 목표는 언급 한 모든 변수가있는 테이블을 가지는 것입니다. summarize()는 user_id와 first_order 만 제공합니다. 게다가, user_id와 관심 변수를 가진 각각의 데이터 프레임을 여러 개 만들어서 결합하려고해도 여전히 user_id 당 여러 개의 엔트리가 있습니다. –

+1

글쎄, mutate는 항상 같은 수의 행을 원래 데이터 집합으로 사용합니다. 이 단순한 경우,'reg_date2'를 그룹핑 변수에 포함 시키거나'summarize'에 포함시킴으로써 (reg_date2 = unique (reg_date2')) 추가 컬럼을 유지하는 것이 쉽습니다. 만약 당신이 mutate를 선호한다면, – aosmith

답변

4

mutate 함수는 기존 데이터 집합에 변수를 추가하므로 항상 시작한 행의 수와 함께 끝납니다.

distinct 함수를 추가하여 id 당 고유 한 행 하나만 유지할 수 있습니다. 다른 모든 변수를 유지하려면 .keep_all 인수가 필요합니다. 이것은 다른 변수를 삭제 되더라도 ID 당 하나의 행에 많은 행에서가는

... %>% 
    group_by(user_id) %>% 
    mutate(first_order = min(order_date2)) %>% 
    distinct(first_order, .keep_all = TRUE) 

는 종종 summarise입니다. 실제 사용 사례가 단순하면 reg_date2user_id마다 고유 한 것으로 보이는 추가 변수를 그룹화 변수로 포함 할 수 있습니다.

... %>% 
    group_by(user_id, reg_date2) %>% 
    summarise(first_order = min(order_date2)) 

또는 (하지만 더 입력 포함), reg_date2을 유지하는 summarise에 포함하여 수행 할 수 있습니다 :

... %>% 
group_by(user_id) %>% 
    summarise(reg_date2 = unique(reg_date2), 
       first_order = min(order_date2))