You need to enable JavaScript to run this app. R语言计算DF每行中大于等于指定阈值的连续值最大长度
优惠活动
大模型
产品
解决方案
定价
更多

R语言计算DF每行中大于等于指定阈值的连续值最大长度

R实现行内连续符合阈值序列最大长度统计

针对百万行量级的数值矩阵/数据框,可通过以下方案实现每行数值>=指定阈值的连续序列最大长度统计,新增为结果列:


核心逻辑

  • 对每行数值生成布尔判断序列:值 >= 阈值返回TRUE,否则返回FALSE
  • 用游程编码函数rle()统计连续相同布尔值的长度
  • 筛选出值为TRUE的游程长度,取最大值即为该行的统计结果,无符合条件的序列时返回0

基础R实现代码

# 生成10x10示例矩阵
df <- replicate(10, sample(0:5, 10, rep=T))
# 设定阈值
threshold <- 3
# 定义统计函数
max_consecutive <- function(row_vec) {
  rle_res <- rle(row_vec >= threshold)
  true_runs <- rle_res$lengths[rle_res$values]
  ifelse(length(true_runs) == 0, 0, max(true_runs))
}
# 逐行计算,新增为结果列
df <- cbind(df, max_consec = apply(df, 1, max_consecutive))

测试样例行:c(2,4,3,3,4,5,1,0,5,1)代入函数计算得到结果为5,符合预期。


百万行量级优化方案(data.table版)

基础R的apply在百万行规模下效率较低,用data.table的行遍历可以大幅提升速度:

library(data.table)
# 转成data.table格式
dt <- as.data.table(df)
threshold <- 3
# 逐行计算
dt[, max_consec := {
  rle_res <- rle(unlist(.SD) >= threshold)
  true_runs <- rle_res$lengths[rle_res$values]
  fifelse(length(true_runs) == 0, 0, max(true_runs))
}, by = 1:nrow(dt)]
# 如果需要转回矩阵格式
res_mat <- as.matrix(dt)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 17:30:03