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
相关产品推荐
相关产品推荐

