计算 R 中行中的连续值

Counting consecutive values in rows in R

我有一个时间序列和面板数据框,第一列有一个特定的 ID,每周的就业状态:失业 (1),就业 (0)。

我有 261 个变量(每年的几周)和 1.000.000 个观察值。

我想计算 R 中每一行连续出现“1”的最大次数。

我看过一些 rowSums 和 rle(),但据我所知我对行的总和不感兴趣,因为值是连续的非常重要。

You can see an example of the structure of my data set here - just imagine more rows and columns

我们可以编写一个小辅助函数来 return 某个值在向量中连续重复的最大次数,对于此用例,默认值为 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 是共享 copy/pasteable 数据子集的简单方法,例如 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]))
}