r - 每个 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))
解决方案
你可以用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
推荐阅读
- netty - Java netty/okhttp gRPC 客户端在尝试连接时抛出间歇性 UNAVAILABLE:io 异常
- mysql - 如何修复xampp服务器
- python - 通过颜色分割发现坑洞
- javascript - 从另一个 js 文件导入 const 时不能在模块外使用 import 语句
- python - 无法在虚拟环境中使用 pip 安装,因为它正在寻找其他地方
- typescript - 如何为对象的对象添加接口
- android - Andorid:在其他应用程序上显示对话框
- java - 如何保留多线程所需的公共数据
- javascript - 2 列编辑器 quilljs
- html - 即使使用 css 网格布局设置了高度,ag-grid JS 也没有显示