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

R语言使用dplyr按行检测连续3个≥20值 新增check列

dplyr实现按行判断连续满足条件的方案

以下方案兼容任意位置NA、适配数百列/数千行规模的数据集,可直接复用。

前置依赖

需提前加载dplyr包:

library(dplyr)

示例测试数据构造

test <- data.frame(
  country = c("US","UK","RU","GR","BE"),
  "y_2018" = c(NA,30,20,40,10),
  "y_2019" = c(10,10,20,20,20),
  "y_2020" = c(20,NA,30,20,20),
  "y_2021" = c(NA,70,10,10,NA),
  check = c(F,F,T,T,F)
)

核心实现代码

test_result <- test %>%
  # 按行处理数据
  rowwise() %>%
  mutate(
    check_cal = {
      # 按时间顺序选取年份列,num_range可自动按年份升序匹配列,避免列序混乱
      year_val <- c_across(num_range("y_", 2018:2021))
      # 逐值判断是否满足≥20,NA直接判定为不满足
      flag <- !is.na(year_val) & year_val >= 20
      # 统计连续值的长度
      rle_res <- rle(flag)
      # 判断是否存在连续3个及以上满足条件的记录
      any(rle_res$lengths[rle_res$values] >= 3)
    }
  ) %>%
  # 取消行分组,避免后续操作受影响
  ungroup()

逻辑说明

  • 列选择用num_range("y_", 起始年:结束年)自动按时间顺序匹配年份列,无需手动枚举所有列,适配任意数量的年份列
  • NA值会直接判定为不满足条件,自动切断连续计数
  • 用内置rle()函数统计连续值长度,性能远高于自定义循环,数千行数据可秒级出结果
  • 若年份列前缀不是y_,替换num_range的前缀参数即可,也可直接传入列名向量指定要判断的列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:48:04