【发布时间】:2018-03-07 09:21:24
【问题描述】:
对于面板数据集 (GSOEP),我需要创建一个时间计数器,在事件发生后为我提供 delta t,该事件在每个人的特定年份被虚拟编码为 1。例如。在随机年份范围内(例如 1990-2006 年)对个人进行观察,其中一个单独的变量表示 1 表示年份中的某个事件,例如1996. 计数器需要在下一年开始,应该以下一个个人 (id) 结束,并且需要在该个人的事件发生之前为零。
目前数据如下:
df <- data.frame(id= rep(c("1","2","3"), each=6), year=rep(1998:2003, times=3), event=c(0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0), stringsAsFactors=FALSE)
id year event
1 1 1998 0
2 1 1999 0
3 1 2000 1
4 1 2001 0
5 1 2002 0
6 1 2003 0
7 2 1998 0
8 2 1999 0
9 2 2000 0
10 2 2001 0
11 2 2002 1
12 2 2003 0
13 3 1998 0
14 3 1999 1
15 3 2000 0
16 3 2001 0
17 3 2002 0
18 3 2003 0
需要的是这样的:
df <- data.frame(id= rep(c("1","2","3"), each=6), year=rep(1998:2003, times=3), event=c(0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0),delta=c(0,0,0,1,2,3,0,0,0,0,0,1,0,0,1,2,3,4), stringsAsFactors=FALSE)
id year event delta
1 1 1998 0 0
2 1 1999 0 0
3 1 2000 1 0
4 1 2001 0 1
5 1 2002 0 2
6 1 2003 0 3
7 2 1998 0 0
8 2 1999 0 0
9 2 2000 0 0
10 2 2001 0 0
11 2 2002 1 0
12 2 2003 0 1
13 3 1998 0 0
14 3 1999 1 0
15 3 2000 0 1
16 3 2001 0 2
17 3 2002 0 3
18 3 2003 0 4
我怎样才能做到这一点?我得到的最接近的是这里:Create sequential counter that restarts on a condition within panel data groups
但我不知道如何修改它以使其仅在事件发生一次后开始并在事件之前放置零。还有一些人没有事件,计数器需要给出零。每个人的年数(观察)是不同的,因此一些 id 的范围是从 1984 年到 1999 年,而另一些则是从 1995 年到 2015 年。
你会极大地帮助我,我想提前感谢你付出的时间和精力。
最好的问候,
朱利叶斯
【问题讨论】:
标签: r dplyr counter panel timedelta