R 加快数据表方式的数据转换

R 加快数据表方式的数据转换,r,data.table,R,Data.table,我有一大张合同日期表。在最后一个表中,我希望每个月都有一行合同处于活动状态。问题是我当前解决方案的速度。有没有更快的方法来实现这一点?(我有超过一百万个不同合同运行时的ID,需要几分钟。我怀疑cbind?!) 库(data.table) dt第一个想法:我可以想到一些调整 首先,我会使用seq.int而不是seq,后者是S3通用的,需要一段时间才能发送,这可能会给一百万组带来成本 第二,我会使用1.9.3(它几乎已经完成,应该很快被推到CRAN上),在那里做了很多增强 第三,我会在j中使用c(

我有一大张合同日期表。在最后一个表中,我希望每个月都有一行合同处于活动状态。问题是我当前解决方案的速度。有没有更快的方法来实现这一点?(我有超过一百万个不同合同运行时的ID,需要几分钟。我怀疑cbind?!)

库(data.table)

dt第一个想法:我可以想到一些调整

  • 首先,我会使用
    seq.int
    而不是
    seq
    ,后者是S3通用的,需要一段时间才能发送,这可能会给一百万组带来成本

  • 第二,我会使用
    1.9.3
    (它几乎已经完成,应该很快被推到CRAN上),在那里做了很多增强

  • 第三,我会在
    j
    中使用
    c(.SD,seq.int(start,end,by=“month”)
    ——这在
    1.9.3
    中进行了内部优化,因此速度会快得多

本质上,请在1.9.3中尝试:

dt[, c(.SD, seq.int(start, end, by="month")), by=id]
当然,这仍然在一百万组上运行,因此可能仍然较慢(即使比您之前的答案更快)。不过,我还是很想知道这里的速度(如果有的话)


但这里真正的问题是,我们正在为每个组评估
j-expression
,你已经得到了一百万个。理想的情况是
seq.int
from
to
参数能够处理长度大于1的输入。但是,最有可能的是,您必须编写自己的C/C++代码才能达到目标。

第一个想法:我可以想到一些调整

  • 首先,我会使用
    seq.int
    而不是
    seq
    ,后者是S3通用的,需要一段时间才能发送,这可能会给一百万组带来成本

  • 第二,我会使用
    1.9.3
    (它几乎已经完成,应该很快被推到CRAN上),在那里做了很多增强

  • 第三,我会在
    j
    中使用
    c(.SD,seq.int(start,end,by=“month”)
    ——这在
    1.9.3
    中进行了内部优化,因此速度会快得多

本质上,请在1.9.3中尝试:

dt[, c(.SD, seq.int(start, end, by="month")), by=id]
当然,这仍然在一百万组上运行,因此可能仍然较慢(即使比您之前的答案更快)。不过,我还是很想知道这里的速度(如果有的话)


但这里真正的问题是,我们正在为每个组评估
j-expression
,你已经得到了一百万个。理想的情况是
seq.int
from
to
参数能够处理长度大于1的输入。但是,最有可能的是,您必须编写自己的C/C++代码才能达到目标。

第一个想法:我可以想到一些调整

  • 首先,我会使用
    seq.int
    而不是
    seq
    ,后者是S3通用的,需要一段时间才能发送,这可能会给一百万组带来成本

  • 第二,我会使用
    1.9.3
    (它几乎已经完成,应该很快被推到CRAN上),在那里做了很多增强

  • 第三,我会在
    j
    中使用
    c(.SD,seq.int(start,end,by=“month”)
    ——这在
    1.9.3
    中进行了内部优化,因此速度会快得多

本质上,请在1.9.3中尝试:

dt[, c(.SD, seq.int(start, end, by="month")), by=id]
当然,这仍然在一百万组上运行,因此可能仍然较慢(即使比您之前的答案更快)。不过,我还是很想知道这里的速度(如果有的话)


但这里真正的问题是,我们正在为每个组评估
j-expression
,你已经得到了一百万个。理想的情况是
seq.int
from
to
参数能够处理长度大于1的输入。但是,最有可能的是,您必须编写自己的C/C++代码才能达到目标。

第一个想法:我可以想到一些调整

  • 首先,我会使用
    seq.int
    而不是
    seq
    ,后者是S3通用的,需要一段时间才能发送,这可能会给一百万组带来成本

  • 第二,我会使用
    1.9.3
    (它几乎已经完成,应该很快被推到CRAN上),在那里做了很多增强

  • 第三,我会在
    j
    中使用
    c(.SD,seq.int(start,end,by=“month”)
    ——这在
    1.9.3
    中进行了内部优化,因此速度会快得多

本质上,请在1.9.3中尝试:

dt[, c(.SD, seq.int(start, end, by="month")), by=id]
当然,这仍然在一百万组上运行,因此可能仍然较慢(即使比您之前的答案更快)。不过,我还是很想知道这里的速度(如果有的话)


但这里真正的问题是,我们正在为每个组评估
j-expression
,你已经得到了一百万个。理想的情况是
seq.int
from
to
参数能够处理长度大于1的输入。但是,最有可能的情况是,您必须编写自己的C/C++代码才能达到目的。

您是否尝试过使用
dt[,seq(start,end,by=“month”),by=id]
生成月份,然后将其与原始数据合并?您是否尝试过使用
dt[,seq(start,end,by=“month”),by=id]生成月份
然后将其与原始数据合并?您是否尝试过使用
dt[,seq(start,end,by=“month”),by=id]
生成月份,然后将其与原始数据合并?您是否尝试过使用
dt[,seq(start,end,by=“month”),by=id]生成月份,然后将其与原始数据合并?