我有第一列中具有特定ID的时间序列和面板数据数据框,以及就业的每周状态:失业(1),就业(0)。
我有261个变量(每年的周数)和1.000.000个观察值。
我想计算R中每行连续出现'1'的最大次数。
我看了一下rowSums和rle(),但我并不是对行的总和感兴趣,因为值非常重要。
答案 0 :(得分:2)
我们可以编写一个小辅助函数来返回某个值在向量中连续重复的最大次数,此用例的默认值为1
most_consecutive_val = function(x, val = 1) {
with(rle(x), max(lengths[values == val]))
}
然后我们可以apply
将此函数添加到数据框的行中,删除第一列(以及不应包含的任何其他列):
apply(your_data_frame[-1], MARGIN = 1, most_consecutive_val)
如果您共享一些易于导入的示例数据,我将很乐意帮助调试,以防出现问题。 dput
是一种简单的方式来共享可复制/可粘贴的数据子集,例如dput(your_data[1:5, 1:10])
是分享数据的前5行和10列的好方法。
如果您想避免警告,并且在没有1的情况下-Inf
结果,请使用评论中的Ryan建议:
most_consecutive_val = function(x, val = 1) {
with(rle(x), if(all(values != val)) 0 else max(lengths[values == val]))
}