【发布时间】:2014-09-11 11:33:45
【问题描述】:
需要帮助加快以下情况:
我有 130 万个订单的大约 850 万行订单历史记录。我需要计算每个订单的两个步骤之间所需的时间。我使用如下计算:
History[, time_to_next_status:=
get_time_to_next_step(id_sales_order_item_status_history,
id_sales_order_item, History_subset),
by='id_sales_order_item_status_history']
在上面的代码中:
- id_sales_order_item - 一个销售订单项目的id - 有多个历史记录具有相同的id_sales_order_item
- id_sales_order_item_status_history - 行的 ID
-
History_subset 是 History 的子集,其中仅包含计算所需的 3 列
[id_sales_order_item_status_history, id_sales_order_item, created_at]。 - created_at 是历史记录的创建时间
函数get_time_to_next_step定义如下
get_time_to_next_step <- function(id_sales_order_item_status_history, filter_by,
dataSet){
dataSet <- dataSet %.% filter(id_sales_order_item == filter_by)
index <- match(currentId, dataSet$id_sales_order_item_status_history)
time_to_next_status <- dataSet[index + 1, created_at] - dataSet[index, created_at]
time_to_next_status
}
问题是运行大约 10k 条历史记录需要 15 分钟。因此,完成计算最多需要 9 天。无论如何我可以在不将数据分解为多个子集的情况下解决这个问题吗?
【问题讨论】:
-
您能否发布一些示例输入/所需的输出?我认为这将是最有帮助的。
标签: r performance function data.table subset