R语言如何从向量列表中筛选1连续出现超3次的向量
你推测使用rle()的思路完全正确,可直接在筛选逻辑中加入游程长度的校验,甚至可以合并两个筛选条件一步得到结果,无需分两步执行:
完整筛选代码
result <- test_list[sapply(test_list, function(vec) { # 计算向量的连续游程 rle_res <- rle(vec) # 判断是否存在值为1且连续长度超过3的游程 any(rle_res$values == 1 & rle_res$lengths > 3) })]
逻辑说明
rle()会返回向量中所有连续相同值段的取值(values)和对应连续长度(lengths)- 上述判断逻辑已经天然覆盖了「向量中存在值为1的元素」的第一个筛选条件,只要存在符合要求的连续1段就会被保留,最终结果仅包含vec1和vec3,符合预期。
如果你需要在已得到的filter_ones结果基础上叠加第二个条件,可使用以下代码:
final_result <- filter_ones[sapply(filter_ones, function(vec) { rle_res <- rle(vec) any(rle_res$values == 1 & rle_res$lengths > 3) })]
内容的提问来源于stack exchange,提问作者ramen
相关产品推荐
相关产品推荐

