在 data.table 中查找间隔

Finding Interval in data.table

我有一个data.table答:

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"。

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

我想做一个 table B 这样的:

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

这样在分别调用TICKER的时候是有时间间隔的。这个 table 然后可以使用 foverlaps() 函数与另一个没有 firmID 的数据集合并。

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

谢谢。

给定您的 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