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

R语言中如何检查逻辑向量内TRUE是否连续出现x次及以上

R中判定逻辑向量连续TRUE段的实现方案

输入预处理

示例中存储的"TRUE"/"FALSE"为字符串类型,需先转换为R原生逻辑值才能参与运算:
logical_vec <- as.logical(c("TRUE", "TRUE", "TRUE", "FALSE", "TRUE", "FALSE", "TRUE", "TRUE", "TRUE", "TRUE"))

核心判定逻辑

借助R内置的rle()(游程编码)函数可直接完成连续序列的特征统计,无需手动逐位计数。

全局判定:是否存在连续x次及以上的TRUE

# 设定连续长度阈值x
x <- 4
# 计算向量的游程统计结果
rle_res <- rle(logical_vec)
# 判定是否存在符合阈值的连续段
has_qualified_run <- any(rle_res$values == TRUE & rle_res$lengths >= x)

对示例向量执行后,has_qualified_run返回TRUE——因最后一段连续4个TRUE达到阈值,其余连续TRUE段长度分别为3、1、1,均不满足要求。

逐位标记:输出位置级的逻辑标记向量

如果需要存储每个位置的判定结果,可将rle的统计结果反向映射回原向量长度,生成逐位置标记:

marked_vec <- inverse.rle(
  list(
    lengths = rle_res$lengths,
    # 每个游程的判定规则:为TRUE且长度达标,则整段标记为TRUE,否则为FALSE
    values = rle_res$values == TRUE & rle_res$lengths >= x
  )
)

对示例向量,最终输出的marked_vec为:
c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)
其中,前一段连续3个TRUE未达4次阈值,整段标记为FALSE;最后一段连续4个TRUE达标,整段标记为TRUE。

分组场景适配提示

  • 这套逻辑可直接嵌入现有for循环的每个分组处理流程,无需调整原有遍历结构
  • 连续段判定前,必须保证每个分组内的日期已按时间顺序排序,否则会出现连续关系误判

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 03:15:03