首页 > 解决方案 > 每个 ID 超过阈值的连续观察的最大连续值

问题描述

我查看了一些关于类似主题的答案,但不幸的是没有一个有效。我有一个时间序列的 .df,我想计算每个 ID 的连续观察值的最大值并将其保留为单独的列。

在此处输入图像描述

...在将新列更改为现有 .df 后,将用 总结新列c(max),但目前,它应该保留在现有 .df 中,无论它看起来如何。

rle()这里的解决方案还是我需要创建一个函数 (x) 来应用rollsum()/rollmax()

谢谢你。

K先生

dput(df)
structure(list(ID = c("a", "a", "a", "a", "a", "b", "b", "b", 
"b", "b", "b"), year = c(2012, 2013, 2014, 2015, 2016, 2010, 
2011, 2012, 2013, 2014, 2015), obs = c(1, 1, 0, 1, 0, 1, 0, 1, 
1, 1, 1)), class = "data.frame", row.names = c(NA, -11L))

标签: r

解决方案


你可以用rle. 基础 R 中的一种方法是,

with(df, ave(obs, ID, FUN = function(i){i1 <- rle(i); max(i1$lengths[i1$values == 1])}))
# [1] 2 2 2 2 2 4 4 4 4 4 4

推荐阅读