如何在r中的不平衡面板数据中抽出时间?

时间:2015-11-19 18:38:39

标签: r

我有不平衡的面板数据,带有二进制变量,指示事件是否发生。我想控制时间依赖性。这样做的方法是控制自事件发生之前已经过去的时间。

这是一个可重复的例子,带有我想要实现的向量。谢谢!

   id year onset time_since_event
1   1 1989     0                0
2   1 1990     0                1
3   1 1991     1                2
4   1 1992     0                0
5   1 1993     0                1
6   1 1994     0                2  
7   2 1989     0                0
8   2 1990     1                1
9   2 1991     0                0
10  2 1992     1                1
11  2 1993     0                2
12  2 1994     0                3  
13  3 1991     0                0
14  3 1992     0                1
15  3 1993     0                2  

˚

id <- c(1,1,1,1,1,2,2,2,2,3,3)
year <- c(1989,1990,1991,1992,1993,1994,1989,1990,1991,1992,1993,1994,1991,1992,1993)
onset <- c(0,0,1,0,0,0,0,1,0,1,0,0,0,0)
time_since_event<-c(0,1,2,0,1,2,0,1,2,3,0,1,2) #what I want to create
df <- data.frame(cbind(id, year, onset,time_since_event))

1 个答案:

答案 0 :(得分:1)

试试这个:

id <- c(1,1,1,1,1,2,2,2,2,3,3)
year <- c(1989,1990,1991,1992,1993,1989,1990,1991,1992,1991,1992)
onset <- c(0,0,1,0,0,0,1,0,1,0,0)
period <- c(0, cumsum(onset)[-length(onset)])
time_since_event <- ave(year, id, period, FUN=function(x) x-x[1])
df <- data.frame(id, year, onset, time_since_event)

我创建了一个名为period的变量,它描述了每个事件之前的不同时期。这段时间与患者重叠并不重要,因为我们按患者和期间分组,因此如果是新患者或新的患者,计数将重新开始。

使用ave()功能允许我们在每个分组中分配值。在这里,我们根据分组变量yearid分析period。我在最后使用的函数只是从每个分组中的当前值中减去第一个值。