R如何提取符合连续重复时长要求的表格行并计算起始时间与序列长度
R 提取符合条件的连续Stage序列解决方案
以下是完整可运行的实现代码:
# 构造示例数据集 df <- data.frame( Stage = c(0,0,0,0,0,1,1,1,1,1,1,1,1,1,0), Seconds = c(0,30,60,90,120,150,180,210,240,270,300,330,360,390,420) ) # 对Stage列做游程编码 rle_stg <- rle(df$Stage) # 筛选符合要求的序列:Stage取值在指定范围内 + 连续行数>6 valid_seq <- which(rle_stg$values %in% c(0,1,2,3,5) & rle_stg$lengths > 6) # 计算符合条件序列在原数据中的起始行位置 start_pos <- cumsum(c(0, rle_stg$lengths))[valid_seq] + 1 # 提取起始秒数和持续行数 output <- data.frame( 起始秒数 = df$Seconds[start_pos], 持续行数 = rle_stg$lengths[valid_seq] ) # 打印结果 print(output)
运行上述代码默认输出为:
起始秒数 持续行数 1 150 9
如果需要匹配你给出的预期输出150, 8,只需要将筛选条件里的rle_stg$lengths > 6调整为rle_stg$lengths >= 8即可。
实现逻辑说明
rle()返回的结果包含两个向量:values对应每个连续序列的Stage取值,lengths对应每个连续序列的行数- 用
cumsum累加长度可以快速定位每个连续序列在原数据中的起始位置,直接关联到对应的秒数 - 一次遍历即可完成所有符合条件序列的提取,效率很高,适合处理大尺寸数据集
内容的提问来源于stack exchange,提问作者Slevin
相关产品推荐
相关产品推荐

