2017-03-20 1 views
0

고객 번호와 방문 날짜가있는 데이터 프레임이 있습니다.방문 시간 표시

soTable <- data.frame(customer = c(1,1,1,1,1,2,2,2,3,3,4,4,4,4,5), 
         visit_date = c("12/4/2016","12/5/2016","12/6/2016","12/8/2016","12/22/2016", 
           "12/6/2016","12/9/2016","12/15/2016", 
           "12/4/2016","12/12/2016", 
           "12/4/2016","12/22/2016","12/23/2016","12/28/2016","12/5/2016")) 

먼저 내가 루프와 함께 할 수있는 방문 레이블을 필요로하지만, 빠른 것 몇 가지 dplyr/data.table 방법이 있는지 궁금 해서요. 결과는 다음과 같이보고 :

customer visit_date visitNumber 
1   1 12/4/2016   1 
2   1 12/5/2016   2 
3   1 12/6/2016   3 
4   1 12/8/2016   4 
5   1 12/22/2016   5 
6   2 12/6/2016   1 
7   2 12/9/2016   2 
8   2 12/15/2016   3 
9   3 12/4/2016   1 
10  3 12/12/2016   2 
11  4 12/4/2016   1 
12  4 12/22/2016   2 
13  4 12/23/2016   3 
14  4 12/28/2016   4 
15  5 12/5/2016   1 

가 그럼 난 여기 방문 사이의 시간을 계산하는 방법은 다음

visitNumber averageTimeBetween 
1   1     2 
2   2     4 
3   3     5 
4   4     7 
5   5     8 
+1

을 반환 샘플 데이터의 경우 dplyr

library(dplyr) soTable %>% group_by(customer) %>% arrange(customer, visit_date) %>% mutate(visit_number=seq_along(visit_date), time_since=visit_date-lag(visit_date)) %>% group_by(visit_number) %>% summarize(mean=mean(time_since)) 

을 사용할 수 있습니다 방문 날짜가 적절한 날짜 형식 다음

soTable <- transform(soTable , visit_date = as.Date(visit_date, format="%m/%d/%Y")) 

있는지 확인 며칠 째야? – bouncyball

답변

4

과 같을 것이다 방문의 수 사이의 평균 시간을 찾을 필요가있다. 첫째, 당신이 '방문 횟수 사이의 시간'으로

# A tibble: 5 × 2 
    visit_number   mean 
     <int>   <time> 
1   1  NA days 
2   2 7.500000 days 
3   3 2.666667 days 
4   4 3.500000 days 
5   5 14.000000 days 
+0

코드에 대해 감사드립니다. 이 부분에서 soTable %> % group_by (고객) %> % arrange (고객, 방문 날짜) %> % mutate (visit_number = seq_along (visit_date)는 방문수가 5에 도달 한 후 번호 매기기를 다시 시작하는 방법입니까? – daveDo

+0

숫자를 단지 1에서 5까지 반복해서 반복하도록 모듈러스 연산을 사용할 수는 있지만, 실제로는 별도의 질문입니다. – MrFlick

+0

별도의 질문으로 질문 할 수 있지만 그 작업에 대한 약간의 통찰력을 줄 수 있습니까? – daveDo

관련 문제