R-加速与数据表子集相关的计算
需要以下案例的加速帮助: 我有大约850万行订单历史记录,订单数量为130万。我需要计算每个订单的两个步骤之间的时间。我使用的计算方法如下:R-加速与数据表子集相关的计算,r,performance,function,data.table,subset,R,Performance,Function,Data.table,Subset,需要以下案例的加速帮助: 我有大约850万行订单历史记录,订单数量为130万。我需要计算每个订单的两个步骤之间的时间。我使用的计算方法如下: History[, time_to_next_status:= get_time_to_next_step(id_sales_order_item_status_history, id_sales_order_item, Hi
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\u sales\u order\u item-销售订单项的id-有多条历史记录具有相同的id\u sales\u order\u item
- 标识\销售\订单\项目\状态\历史记录-行的标识
- History\u subset是History的一个子集,它只包含计算所需的3列
[id\u sales\u order\u item\u status\u History,id\u sales\u order\u item,created\u at]
- created\u at是创建历史记录的时间
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
}
获取时间到下一步我要拍一张照片。你不能试试这样的吗
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]
我想这会很快。您能发布一些示例输入/所需输出吗?我想这会很有帮助。谢谢你-我正要把“当前id”编辑成“id\U销售\订单\项目”。它相当快。刚跑完,它就在5分钟内达到了1米的行数,这很有趣……我有点惊讶它仍然如此缓慢。可能是一个lag
操作,然后减法会更快。但我不确定。为什么不干脆历史[,时间到下一个状态:=c(NA,diff(创建时间)),by=id\u销售\u订单\u项目]
@Mike,我跟踪错误,由于数据是按id\u sales\u order\u item
分组的,当它达到100万次计数时,意味着它已经超过了100万次id\u sales\u order\u item
,这大约是6~700万次历史记录。我不知道在这种情况下怎么能有帮助。谢谢mnel-我刚刚测试了你的公式,它们非常快-认为结果不是我想要的,因为现在是自上次状态以来的时间了。