我有一个数据表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循环就可以做到这一点,并将每条记录与前一条进行比较,等等吗?
谢谢。
答案 0 :(得分:1)
鉴于您的A
data.table,获得date
的最小值和最大值将分别给STARTdate
和ENDdate
。
如果将by
和TICKER
都分组(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