【发布时间】:2019-05-28 20:32:20
【问题描述】:
我想明确统计在每个 SKU 的第一个和最后一个购买日期之间从公司购买的客户数量。这是在我清楚地计算了 SQL 中给出的每个 SKU 的客户数量(以及找到第一个和最后一个购买日期)之后,
我有成功解决这个问题的代码;但是,它使用了一个 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')
然后我有另一个大约 600 万行长的表,一个选择不同的销售日期和我称为 OrderTable 的 CustomerID。我不能每天总结不同的计数并将它们加在一起,因为这会使在不同日子购买的客户重复计算。我必须使用我在 SKUCount 表中看到的每个 FirstPurchase/LastPurchase 排列重新计算不同的计数。从那里,我使用以下代码计算给定时间范围内的不同客户数量:
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 秒)。有没有更快的方法来计算不同的计数,还是有更聪明的解决方案来解决我的问题?
【问题讨论】:
-
这听起来像是一个使用 R 中可用的任何 SQL 包的简单解决方案。你可以使用这些吗?有了你所说的那么多数据,如果你还没有提前使用 RDBS,我会感到惊讶。
-
你能发布一个
OrderTable的例子,这样你就有一个完全可重现的例子吗?
标签: r