交错的数据会创建其他行(例如时间变量)

时间:2019-07-03 04:20:35

标签: r data.table

我要处理的数据存在此问题

基本上在此数据表A中:

FIRM    yrqtr   happened
   A    2001Q1         0
   A    2001Q2         0
   A    2001Q3         1
   A    2001Q4         0
   A    2002Q1         1
   A    2002Q2         0
   A    2002Q3         0

基本上“ yrqtr”是季度变量,发生在此FIRM A“发生”的事情上,并且是因子变量。

我想创建一个时间索引变量,以使发生前四分之一(发生== 1)的时间索引将收到时间索引0,而在接收到时间索引-1之前为四分之一。由于它在“发生”之前,因此该行中的“发生”列将收到0。

(happened == 1)接收时间索引2后的未来四分之一也一样,在该行发生的也将变为1,接收时间索引3后发生的未来二分之一又将变为1。

我只希望发生前后2个周期,否则将有一个时间索引NA或忽略它。

如果这家公司只发生一次,这很容易做到,通过在(happened == 1)之后使用seq()函数创建附加的时间列,并在“ happened”上使用ifelse条件,如果时间为正则“ happened”将为1,负时间将为0。

但是现在我有两个“发生”并且彼此重叠,我想创建其他行以适应重叠的时间。

这就是我想要的:

FIRM   yrqtr    happened    time
   A   2001Q1          0      -1
   A   2001Q2          0       0
   A   2001Q3          1       1
   A   2001Q4          1       2
   A   2002Q1          1       3
   A   2001Q3          0      -1
   A   2001Q4          0       0
   A   2002Q1          1       1
   A   2002Q2          1       2
   A   2002Q3          1       3

因此,这就像发生两个事件的时间轴错开了一样,创建了新的行以适应时间变量。

任何人都知道如何使用例如data.table还是我需要为此编写一个循环?

这与创建用于交错差值估计的数据有关。

非常感谢。

1 个答案:

答案 0 :(得分:1)

假设happened列应保持与以前相同,这是使用zoodata.table的一种可行方法:

library(zoo)
DT[, yrqtr := as.yearqtr(yrqtr)]
DT[happened==1L, 
    .(yrqtr=seq(yrqtr-0.5, by=0.25, length.out=5),
        happened=c(0L,0L,1L,1L,1L),
        time=-1L:3L), 
    by=.(FIRM, rowid(happened))][, rowid:=NULL]

输出:

    FIRM   yrqtr happened time
 1:    A 2001 Q1        0   -1
 2:    A 2001 Q2        0    0
 3:    A 2001 Q3        1    1
 4:    A 2001 Q4        1    2
 5:    A 2002 Q1        1    3
 6:    A 2001 Q3        0   -1
 7:    A 2001 Q4        0    0
 8:    A 2002 Q1        1    1
 9:    A 2002 Q2        1    2
10:    A 2002 Q3        1    3

数据:

library(data.table)
DT <- fread("FIRM    yrqtr   happened
A    2001Q1         0
A    2001Q2         0
A    2001Q3         1
A    2001Q4         0
A    2002Q1         1
A    2002Q2         0
A    2002Q3         0")