在 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
的最小值和最大值将分别得到 STARTdate
和 ENDdate
。
如果将 TICKER
和 firmID
分组 (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
我有一个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
的最小值和最大值将分别得到 STARTdate
和 ENDdate
。
如果将 TICKER
和 firmID
分组 (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