我有以下数据:
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为注册日期,purchase_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 :(得分:0)
假设您的输入数据采用以下格式
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")
然后你可以做
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))
获取您需要的数据
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
请注意,我在这里使用了10天而不是30天,因为您没有购买任何超过30天的购买意见。因此,对于您的真实数据,请将%/% 10
更改为%/% 30
。