R-加速与数据表子集相关的计算

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

需要以下案例的加速帮助:

我有大约850万行订单历史记录,订单数量为130万。我需要计算每个订单的两个步骤之间的时间。我使用的计算方法如下:

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 subsetHistory的一个子集,它只包含计算所需的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-我刚刚测试了你的公式,它们非常快-认为结果不是我想要的,因为现在是自上次状态以来的时间了。