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

R data frame按列名前缀索引批量筛选多x列均为1的行且保留全列的方法

实现方案

方案1:基础R(无需安装额外依赖包)

核心逻辑是先匹配所有前缀为x的列,再逐行判断这些列的取值是否全部为1:

# 匹配所有x前缀的列
x_col_idx <- startsWith(colnames(df), "x")
# 逐行判断x列是否全为1,筛选符合条件的行,保留全部列
df_result <- df[apply(df[, x_col_idx], 1, function(r) all(r == 1)), ]

如果追求更高运行效率(尤其数据量较大时),可以用rowSums替代apply:

x_col_idx <- startsWith(colnames(df), "x")
# 所有x列都为1时,每行等于1的个数刚好等于x列的总数量
df_result <- df[rowSums(df[, x_col_idx] == 1) == sum(x_col_idx), ]

方案2:tidyverse(写法简洁易读)

用dplyr的if_all语法可以一键完成多列条件匹配,代码适配性极强,哪怕后续x列增加到40个也无需修改逻辑:

library(dplyr)

df_result <- df %>%
  # 对所有以x开头的列,要求取值全部等于1
  filter(if_all(starts_with("x"), ~ .x == 1))

两种方案运行后都和手动逐列写条件得到的结果完全一致,且会保留z1等所有非x前缀的列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:15:03