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

R语言筛选DataFrame中存在连续两列值均为1的行

R语言筛选存在至少两个连续1的行方案

核心实现代码

# 构造示例数据
df <- read.table(text = "  0m-10m 0m-15m 0m-20m 0m-25m
                 X 1 0 1 1 
                 Y 1 1 0 0 
                 Z 0 1 0 1 ", header = T)

# 方法1:相邻列逻辑与运算,适合超大数据集,运算效率高
cond <- rowSums(df[,-ncol(df)] & df[,-1]) > 0
result <- df[cond, ]

# 方法2:基于rle的实现,扩展性更强,可方便调整连续长度要求
cond <- apply(df, 1, function(row) {
  rle_res <- rle(row)
  any(rle_res$lengths >= 2 & rle_res$values == 1)
})
result <- df[cond, ]

逻辑说明

你之前使用的rowSums >=2逻辑仅能判断该行1的总数量≥2,无法校验1是否连续,因此会误筛选出Z行这类1不连续的结果。

  • 方法1原理:df[,-ncol(df)]为去掉最后一列的数据集,df[,-1]为去掉第一列的数据集,两者按位做逻辑与运算后,得到的矩阵每个元素代表原数据对应列和右侧相邻列是否同时为1;对矩阵按行求和,只要和大于0就说明该行存在至少一组连续的1,性能远高于逐行遍历,适合大型DataFrame使用。
  • 方法2原理:通过rle()函数统计每行连续相同值的长度和对应值,直接判断是否存在值为1且长度≥2的连续段,后续如果需要调整为筛选连续3个及以上1的行,仅需修改rle_res$lengths >= 2中的数值即可。

输出的result即为符合要求的结果:

0m-10m 0m-15m 0m-20m 0m-25m
X      1      0      1      1
Y      1      1      0      0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:27:00