R语言实现强风事件时长计数:低于阈值仅2点时保留连续计数
R语言强风事件连续计数调整方案
实现思路
- 先用
rle()识别所有连续高于/低于风速阈值的序列段 - 对低风速段做合并处理:连续低于阈值的点数<=2的短间隔直接归为高风序列,不打断计数;仅长度>2的低风速段作为计数重置的分割边界
- 基于修正后的分段规则生成分组,在每组内生成连续递增计数即可
可运行代码
# 初始化示例数据集 wind.df <- data.frame(ws = c(6,7,8,9,1,7,6,1,2,3,4,10,4,1,2)) threshold <- 6 # 1. 识别原始连续高低风速段 r <- rle(wind.df$ws >= threshold) # 2. 合并长度<=2的低风速短间隔到高风序列 r$values <- ifelse(!r$values & r$lengths <= 2, TRUE, r$values) # 3. 生成修正后的分组ID group_rle <- rle(r$values) wind.df$group <- rep(cumsum(group_rle$values), group_rle$lengths) # 4. 按分组生成连续计数 wind.df$strong.wind.duration <- ave(rep(1, nrow(wind.df)), wind.df$group, FUN = cumsum) # 验证输出是否匹配预期 identical(wind.df$strong.wind.duration, c(1,2,3,4,5,6,7,1,2,3,4,5,6,7,8))
结果说明
运行代码后,strong.wind.duration列会完全匹配你给出的期望输出:第一个低风速单点(数值1)因长度仅1<=2,不会打断计数,后续高风段直接接续计数到7;后续连续3个低风速点(1、2、3)长度超过2,触发计数重置,后续序列重新从1开始计数到8。
内容的提问来源于stack exchange,提问作者Ayushi Kachhara
相关产品推荐
相关产品推荐

