在data.table中查找间隔

时间:2018-11-26 15:57:20

标签: r data.table intervals

我有一个数据表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”,“日期”,“ TICKER”列。

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

我想像这样制作一张桌子B:

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

因此,当分别调用TICKER时,它具有一个时间间隔。然后,可以使用foverlaps()函数将此表与没有牢固ID的另一个数据集合并。

有什么主意,不用编写for循环就可以做到这一点,并将每条记录与前一条进行比较,等等吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

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

如果将byTICKER都分组(firmID),则可能会得到想要的结果。

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