需要关于加速以下案例的帮助:
对于1.3M订单,我有大约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_status_history, id_sales_order_item, 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
}
问题是需要15分钟来运行历史记录的10k记录。因此,完成计算需要大约9天的时间。无论如何,我可以在没有将数据分成多个子集的情况下将其固定下来吗?
答案 0 :(得分:2)
我会开枪。难道你不能尝试这样的事情..
History[ , Index := 1:.N, by= id_sales_order_item]
History[ , time_to_next_status := created_at[Index+1]-created_at[Index], by= id_sales_order_item]
我认为这会非常快。