異なる分割のトランザクション間の平均遅延を計算したいと考えています。解決策は既にありますが、別の方法で遅延を計算する必要があります。
データセットは次のようになります。
customer_id transaction_date type sign period
A 01/01/15 A C 30 days
A 05/01/15 A C 30 days
A 10/01/15 B D 30 days
A 25/01/15 B D 30 days
transaction_data = structure(list(customer_id = c("A", "A", "A", "A"),
transaction_date = c("01/01/15",
"05/01/15", "10/01/15", "25/01/15"), type = c("A", "A", "B",
"B"), sign = c("C", "C", "D", "D"), period = c("30 days", "30 days",
"30 days", "30 days")), .Names = c("customer_id", "transaction_date",
"type", "sign", "period"), row.names = c(NA, -4L), class = "data.frame")
解決策 古い方法
私が以前行っていたのは、次のように、最初に後続のトランザクション間の遅延を計算することでした:
# Delay between subseauent transactions
library(data.table)
setDT(transaction_data)[,delay_in_transactions_days:= c(0, diff.Date(transaction_date)), .(customer_id)]
# Convert seconds to days
transaction_data <- mutate(transaction_data, delay_in_days = delay_in_transactions_days/86400)
# Convert to integer
transaction_data$delay_in_days <- as.integer(transaction_data$delay_in_days)
次に、dcast を使用して、各トランザクション遅延の各分割の平均を計算します。
dcast(setDT(transaction_data), customer_id ~ paste0("avg_delay_",period), value.var = "delay_in_days", mean)
問題の新しい方法
遅延を計算するために使用したい新しい方法は、次の式によるものです。
クライアントごと: (最新のトランザクション - 最初のトランザクション) / (トランザクション数 - 1)
もちろん問題は、すべてのトランザクションの遅延になるため、期間ごとに遅延を計算できないことです。代わりに、特定のタイプまたは記号、または分割の組み合わせの期間ごとの遅延として計算する必要があります。
問題にどのようにアプローチするかについてのアイデアはありますか?
期待される出力
customer_id av.delay_30days av.delay_30_days_TYPE_A av.delay_30_days_TYPE_B
A 8 4 15