【发布时间】:2015-11-21 17:16:59
【问题描述】:
我有一个面板数据集,我想为其创建一个计数器,该计数器随着面板中的每一步而增加,但在发生某些情况时会重新启动。就我而言,我使用的是国家/地区年份数据,并希望计算事件之间的年数。这是一个玩具数据集,其中包含我的真实数据集的主要特征:
df <- data.frame(country = rep(c("A","B"), each=5), year=rep(2000:2004, times=2), event=c(0,0,1,0,0,1,0,0,1,0), stringsAsFactors=FALSE)
我要做的是在每个国家/地区的一系列观察中创建一个键入df$event 的计数器。当我们开始观察每个国家时,时钟从 1 开始;它随着每一年的流逝而增加1;并且每当df$event==1 时,它都会在 1 处重新启动。期望的输出是这样的:
country year event clock
1 A 2000 0 1
2 A 2001 0 2
3 A 2002 1 1
4 A 2003 0 2
5 A 2004 0 3
6 B 2000 1 1
7 B 2001 0 2
8 B 2002 0 3
9 B 2003 1 1
10 B 2004 0 2
我曾尝试使用splitstackshape 中的getanID 以及if 和ifelse 的一些变体,但到目前为止未能获得所需的结果。
我已经在需要执行此操作的脚本中使用dplyr,因此我更喜欢使用它或基于 R 的解决方案,但我会感谢任何有效的解决方案。我的数据集并不庞大,因此速度并不重要,但效率始终是加分项。
【问题讨论】:
-
这个问题与另一个问题不太一样。另一个要求为每个组中的所有行制作一个简单的计数器。这个问题询问关于组内的步数计数,直到某些条件发生,然后在条件确实发生时重新启动计数器,并重复执行此操作。这对事件历史数据特别有用,但在其他情况下也很有用,而且更简单的先前版本不会这样做。
标签: r time-series dplyr