0

私が欲しいテーブルは「ヴィンテージ分析フォーマット」と呼ばれるものだと思います。

以下は再現可能なデータセットです。

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 
``
4

1 に答える 1