我想从下面的dataframe创建一个平衡的面板数据:
id program_year value
1 2007 1
1 2008 1
1 2009 1
1 2010 1
1 2011 1
1 2012 1
1 2013 0
2 2007 0
2 2008 1
2 2009 1
2 2010 1
2 2011 1
2 2012 1
2 2013 1
3 2007 1
3 2008 0
3 2009 1
3 2010 1
3 2011 1
3 2012 1
3 2013 1
对于每个id
,我想选择program_year
列中具有连续value == 1
的 5 行。
预期的输出应该如下所示:
id program_year value
1 2007 1
1 2008 1
1 2009 1
1 2010 1
1 2011 1
2 2008 1
2 2009 1
2 2010 1
2 2011 1
2 2012 1
3 2009 1
3 2010 1
3 2011 1
3 2012 1
3 2013 1
我已经用lead()
和lag()
进行了探索,但没有任何成功。获得所需输出后的下一步是索引年份,使dataframe成为一个平衡的面板。
4条答案
按热度按时间f4t66c6m1#
不知道这是否是你需要的:
它返回以下内容:
修改了答案以满足您的条件
where value == 1
yyyllmsg2#
这里有一个使用
dplyr::consecutive_id()
和每操作分组的解决方案。确保你使用的是最新版本的dplyr。6yoyoihd3#
这里的技巧是创建两个虚拟列:首先是一个行号列,然后是一个按列的虚拟组。最后,您将从结果中取消选择虚拟列。
© 2019 www.dummygroup.com版权所有并保留所有权利
e5nszbig4#
在
by
中,对于每个ID,我们可以首先为非零值创建subset
,为连续值的集合创建一个组u
,和subset
x
,对于可能在table
中产生which.max
数量的观察的组。接下来,我们head
列表-例如"by"
对象,对于min
最大观测数,最后是rbind
。给出给定ID的连续观测的最大可能子集,尽管如OP中所要求的,具有不匹配年,但添加了新的周期变量。