我相信我想要的表格被称为“复古分析格式”。
下面是一个可重现的数据集。
library(BTYDplus)
txn <- head(BTYDplus::groceryElog,100)
custFirstTxn <- BTYDplus::groceryElog %>% group_by(cust) %>% arrange(cust, date) %>%
filter(row_number()==1) #%>%
#mutate(cohort = tsibble::yearmonth(date))
custFirstTxn$cohort <- tsibble::yearmonth(custFirstTxn$date)
custFirstTxn %>% group_by(cohort) %>% summarise(n()) %>% ungroup()
custFirstTxn <- custFirstTxn %>% ungroup()
mycust <- custFirstTxn %>% group_by(cohort) %>% top_n(n = 6, wt = cust) %>% dplyr::select(-date)
monthlytxn <- BTYDplus::groceryElog %>%
mutate(date = date %>% tsibble::yearmonth()) %>%
group_by(cust, date) %>% tally() %>%
filter(cust %in% mycust$cust & date <= tsibble::yearmonth('2006 Jun')) %>% arrange(date)
monthlytxn %>% pivot_wider(names_from = date, values_from = n)
# A tibble: 18 x 7
# Groups: cust [18]
cust 2006 Jan 2006 Feb 2006 Mar 2006 Apr 2006 May 2006 Jun
<fct> <int> <int> <int> <int> <int> <int>
1 534 1 1 NA NA NA 1
2 535 1 NA NA NA NA 2
3 536 1 NA 1 1 1 1
4 537 1 NA 1 NA NA 1
5 538 1 2 1 1 2 1
6 539 1 1 NA NA NA NA
7 1018 NA 1 NA NA NA NA
8 1019 NA 1 NA 1 1 NA
9 1020 NA 1 2 3 2 3
10 1021 NA 1 2 1 1 1
11 1022 NA 1 1 2 1 NA
12 1023 NA 1 1 1 NA NA
13 1520 NA NA 1 NA NA NA
14 1521 NA NA 1 NA 1 NA
15 1522 NA NA 1 1 NA NA
16 1523 NA NA 1 NA NA NA
17 1524 NA NA 1 1 NA NA
18 1525 NA NA 1 2 1 1
我们注意到,不同的客户群体有不同的群体日期。有些分别在 2006 年 1 月、2006 年 2 月和 2006 年 3 月进行了首次交易。
我想要的是将这些更宽的表格转换为下面。请注意,日期现在不再是每月日期,而是标准化为每个客户的第一个月交易。
# MOB refers to MonthOnBook
# I truncate the other MOB to simplify the view.
cust MOB1 MOB2 MOB3 MOB4
<fct> <int> <int> <int> <int>
1 534 1 1 NA NA
2 535 1 NA NA NA
3 536 1 NA 1 1
4 537 1 NA 1 NA
5 538 1 2 1 1
6 539 1 1 NA NA
7 1018 1 NA NA NA
8 1019 1 NA 1 1
9 1020 1 2 3 2
10 1021 1 2 1 1
11 1022 1 1 2 1
12 1023 1 1 1 NA
13 1520 1 NA NA NA
14 1521 1 NA 1 NA
15 1522 1 1 NA NA
16 1523 1 NA NA NA
17 1524 1 1 NA NA
18 1525 1 2 1 1
``