Я работаю с набором данных о поездках клиентов, который необходимо преобразовать в данные временных рядов на уровне дня. Чтобы дать краткий обзор данных:
PurchaseID Timestamp Touchpoint Purchase
1 2015-08-07 19:16:59 1 1
1 2015-11-03 12:31:35 7 1
1 2015-11-03 12:39:22 3 1
2 2015-11-24 22:29:39 1 0
2 2016-05-21 08:39:44 1 0
2 2016-06-15 15:48:20 4 0
...
Каждый уникальный номер в PurchaseID - это путешествие. Проблема здесь в том, что для каждой поездки, которая приводит к покупке, Покупка имеет 1 для каждой точки контакта в поездке. Я хочу изменить это значение только до конечной точки касания, имеющей 1, как в точке продажи, например:
PurchaseID Timestamp Touchpoint Purchase POS
1 2015-08-07 19:16:59 1 1 0
1 2015-11-03 12:31:35 7 1 0
1 2015-11-03 12:39:22 3 1 1
2 2015-11-24 22:29:39 1 0 0
2 2016-05-21 08:39:44 1 0 0
2 2016-06-15 15:48:20 4 0 0
...
Я рассуждал, что самым простым способом было бы создание цикла, который заполняет новую переменную JourneyLength (которую я также могу использовать для последующего анализа), которая подсчитывает количество шагов в путешествии. Например:
PurchaseID Timestamp Touchpoint Purchase JourneyLength
1 2015-08-07 19:16:59 1 1 1
1 2015-11-03 12:31:35 7 1 2
1 2015-11-03 12:39:22 3 1 3
...
Используя новый цикл, можно использовать максимум каждого уникального идентификатора покупки, чтобы заполнить POS единицей за каждый последний (и, следовательно, максимальный) шаг поездки, если будет совершена покупка.
То, что я пробовал до сих пор, не дало желаемого результата:
CJDsub$JLength <- 0 # journey length counter, first set to 0
for (x in 1:length(CJDsub$PurchaseID)) {
if(unique(x))
CJDsub$JLength <- CJDsub$JLength+1
else next
}
Кроме того, пакет dplyr также не привел к желаемым результатам. (Это пропускает часть подсчета шагов)
library(dplyr)
CJDsub %>% group_by(PurchaseID) %>% summarize(
timestamp <- timestamp,
purchase_any <- sum(purchase_any)
)
Есть ли у кого-нибудь предложения, как решить эту проблему и получить правильную структуру данных? Заранее спасибо!
Опять же, это то, что я хочу в качестве результата:
PurchaseID Timestamp Touchpoint Purchase POS
1 2015-08-07 19:16:59 1 1 0
1 2015-11-03 12:31:35 7 1 0
1 2015-11-03 12:39:22 3 1 1
2 2015-11-24 22:29:39 1 0 0
2 2016-05-21 08:39:44 1 0 0
2 2016-06-15 15:48:20 4 0 0
...