我有不平衡的面板数据,带有二进制变量,指示事件是否发生。我想控制时间依赖性。这样做的方法是控制自事件发生之前已经过去的时间。
这是一个可重复的例子,带有我想要实现的向量。谢谢!
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))
答案 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()
功能允许我们在每个分组中分配值。在这里,我们根据分组变量year
和id
分析period
。我在最后使用的函数只是从每个分组中的当前值中减去第一个值。