【问题标题】:Finding Interval in data.table在 data.table 中查找区间
【发布时间】:2018-11-26 15:57:19
【问题描述】:

我有一个data.table A:

A = data.table(firmID = c("89031", "89031", "89031", "89031", "89031", "89031"), date = c("20170403","20170404", "20170405", "20170406", "20170407", "20170408"), TICKER = c("TSAR", "TSAR", "TSAR", "AAXN", "AAXN", "AAXN" ) )

这里包含列“firmID”、“date”、“TICKER”。

现在,firmID 跟踪同一家公司,即使他们的 TICKER 发生了变化。在这里,我们看到 TICKER 从 20170426 开始从 AAXN 更改为 TSAR。

我想做一个这样的表B:

B = data.table(firmID = c("89031", "89031"), STARTdate = c("20170403", "20170406"), ENDdate = c("20170405", "20170408"), TICKER = c("TSAR", "AAXN"))

这样,当TICKER被分别调用时,它就有一个时间间隔。然后可以使用该表与另一个没有使用 foverlaps() 函数的firmID 的数据集合并。

知道如何在不编写 for 循环并将每条记录与前一条记录进行比较等情况下做到这一点吗?

谢谢。

【问题讨论】:

    标签: r data.table intervals


    【解决方案1】:

    给定您的A data.table,获得date 的最小值和最大值将分别给出STARTdateENDdate

    如果您将TICKERfirmID 分组(by),您可能会得到您想要的结果。

    library(data.table)
    A[,
      .(STARTdate = min(date), ENDdate = max(date)), # range of date
      by = .(TICKER, firmID)]
    
    #>    TICKER firmID STARTdate  ENDdate
    #> 1:   TSAR  89031  20170403 20170405
    #> 2:   AAXN  89031  20170406 20170408
    

    【讨论】:

      猜你喜欢
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多