2014-09-08 4 views
0

나는 다음과 같은 데이터가 있습니다코호트 데이터 변환

각 행은 고객에 해당
signup_date purchase_date nbr_purchase 
    2010-12-12    7   2 
    2011-01-03    4   1 
    2010-11-28    6   2 
    2011-01-05   19   9 
    2010-11-10   26   3 
    2010-11-25   11   2 

, signup_date은 구매 일이 가입하고 첫 구매에서 경과 일수입니다 날짜 가입입니다, nbr_purchase은 수있다 구입 한 품목. 내가 코호트 분석을 수행하고처럼 보이도록 데이터를 변환하고 싶습니다 :

cohort signed_up active_m0 active_m1 active_m2 
2011-10 12345  10432  8765  6754 
2011-11 12345  10432  8765  6754 
2011-12 12345  10432  8765  6754 

코호트 여기서 "YYYY-MM"형식으로, signed_up은 주어진 달에 계정을 생성 한 사용자의 수는 active_m0입니다 - 등록한 달과 같은 달에 처음으로 구매 한 사용자 수, active_m1 - 다음 달에 처음으로 구매 한 사용자 수 등이 포함됩니다.

+0

여기에 몇 달을 정의 하시겠습니까? 가입 날짜가 1 월 31 일이고 구매가 2 월 1 일인 경우 다음 달입니까? 몇 개월 단위가 ~ 30 일입니까? 제공된 입력이 동일한 입력 데이터에 대해 올바른 결과를 얻었 으면 올바른 답변을 얻을 수있을 때 더 잘 알 수 있습니다. – MrFlick

+0

가상 출력에 대해 유감스럽게 생각하지만 3M 고객과 유사하므로 정확한 출력을 수동으로 얻지 못합니다. 나는 매월 30 일을 고려하고 있습니다. – user9594

답변

0

당신은 내가 10을 사용 여기

 active_m1 active_m2 active_m3 signed_up 
2010-11   1   1   1   3 
2010-12   1   0   0   1 
2011-01   1   1   0   2 

메모를 필요로하는 데이터를 얻을 수

dd$cohort <- strftime(dd$signup_date, "%Y-%m") 
dd$interval <- paste0("active_m",(dd$purchase_date %/% 10) +1) 

tt<-with(dd, table(cohort, interval)) 
cbind(tt, signed_up=rowSums(tt)) 

을 할 수있는 다음과 같은 형식으로 다음

dd<-structure(list(signup_date = structure(c(14955, 14977, 14941, 
14979, 14923, 14938), class = "Date"), purchase_date = c(7L, 
4L, 6L, 19L, 26L, 11L), nbr_purchase = c(2L, 1L, 2L, 9L, 3L, 
2L)), .Names = c("signup_date", "purchase_date", "nbr_purchase" 
), row.names = c(NA, -6L), class = "data.frame") 

에서에서 입력 데이터를 가정 30 일이 넘는 구매 관찰이 없었기 때문에 30 일이 아닌 하루 간격으로 응. 실제 데이터의 경우 %/% 10%/% 30으로 변경하십시오.