计算 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]))
}
我有一个时间序列和面板数据框,第一列有一个特定的 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]))
}