You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在dplyr中按年份分组计算new.high最长连续0序列长度

按分组计算连续0的最大长度

针对已按yeard和ydayd排序的so.df数据框,要按yeard分组计算new.high列中连续0的最大长度,以下是两种常用实现方式:

方法1:使用dplyr包

library(dplyr)

so.df %>%
  group_by(yeard) %>%
  # 为组内连续相同的new.high值分配唯一标识
  mutate(zero_group = cumsum(new.high != lag(new.high, default = first(new.high)))) %>%
  filter(new.high == 0) %>%
  # 统计每组内各连续0序列的长度
  group_by(yeard, zero_group) %>%
  summarise(zero_length = n(), .groups = "drop_last") %>%
  # 提取每组的最大连续0长度
  summarise(max_zero_length = max(zero_length, na.rm = TRUE))

方法2:使用data.table包(大数据场景更高效)

library(data.table)

setDT(so.df)
so.df[, .(
  max_zero_length = {
    rle_obj <- rle(new.high)
    # 提取连续0的长度,无0时返回0
    max(rle_obj$lengths[rle_obj$values == 0], 0, na.rm = TRUE)
  }), by = yeard]

说明

  • 两种方法均实现分组计算逻辑,和你原本的全局rle操作逻辑一致,只是限定在yeard分组内执行
  • 若某分组中没有0值,max参数na.rm=TRUE和兜底值0会确保返回0而非NA

内容的提问来源于stack exchange,提问作者ECII

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:55:32