Я хочу четко подсчитать количество клиентов, купивших у компании, между первой и последней датой покупки каждого SKU. Это после того, как я четко подсчитал количество клиентов для каждого SKU, указанного в SQL (а также нашел первую и последнюю дату покупки),
У меня есть код, который успешно решает эту проблему; однако он использует цикл for и занимает слишком много времени, потому что существуют десятки тысяч SKU. Вот краткий пример того, как выглядит моя таблица SKU:
SKUID <- c('123', '456', '789')
NumberOfCustomers <- c(204543, 92703, 305727)
SKUFirstPurchase <- c('2014-05-02', '2014-02-03', '2016-05-13')
SKULastPurchase <- c('2017-09-30', '2018-07-01', '2019-01-09')
SKUCount <- data.frame(SKUID, NumberOfCustomers,
SKUFirstPurchase, SKULastPurchase)
colnames(SKUCount) <- c('SKU', 'NumberOfCustomers',
'FirstPurchase', 'LastPurchase')
Затем у меня есть еще одна таблица, длина которой составляет около 6 миллионов строк, выборка, отличная от даты продажи и CustomerID, который я называю OrderTable. Я не могу суммировать данные об отдельных счетах на ежедневной основе и суммировать их вместе, потому что это удвоило бы количество клиентов, которые приобрели в отдельные дни. Я должен пересчитать различное количество с каждой перестановкой FirstPurchase / LastPurchase, которую я вижу в своей таблице SKUCount. Оттуда я использую следующий код для вычисления различного числа клиентов в данный период времени:
library(dplyr)
for (i in 1:nrow(SKUCount))
{
SKUCount[i, c('DateCustomers')] <-
sapply(OrderTable %>%
filter(Date >= SKUCount[i,'FirstPurchase'],
Date <= SKUCount[i,'LastPurchase']) %>%
select(CustomerID),
function(x) length(unique(x)))
}
Как я уже отмечал, этот фрагмент кода работает, но он очень медленный (~ 0,5 секунды для каждой строки). Есть ли более быстрый способ подсчета различных показателей или есть более разумное решение моей проблемы?