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

如何在R语言中筛选多列含Y的行并排除仅单列为Y的行

R语言:筛选指定多列中包含多个"Y"的行

需求说明

保留数据中**指定多列里至少有2个"Y"**的行,排除仅单一列含"Y"的行。

示例原始数据

先构造符合需求的示例数据:

df <- data.frame(
  ID = 1:5,
  ColA = c("Y", "N", "Y", "Y", "N"),
  ColB = c("N", "Y", "Y", "N", "Y"),
  ColC = c("Y", "N", "N", "Y", "N"),
  OtherCol = c("X", "X", "X", "X", "X")
)

原始数据输出:

ID ColA ColB ColC OtherCol
1  1    Y    N    Y        X
2  2    N    Y    N        X
3  3    Y    Y    N        X
4  4    Y    N    Y        X
5  5    N    Y    N        X

解决方案

方法1:Base R 实现

无需额外包,直接用行求和筛选:

# 定义需要检查的目标列
target_cols <- c("ColA", "ColB", "ColC")

# 计算每行目标列中"Y"的数量,筛选数量≥2的行
filtered_df <- df[rowSums(df[target_cols] == "Y") >= 2, ]

方法2:dplyr 实现

适合习惯tidyverse风格的用户:

library(dplyr)

filtered_df <- df %>%
  rowwise() %>%
  # 统计每行目标列中"Y"的数量
  mutate(y_count = sum(c_across(all_of(target_cols)) == "Y")) %>%
  # 保留数量≥2的行
  filter(y_count >= 2) %>%
  # 移除临时计数列
  select(-y_count)

期望输出结果

运行上述代码后,得到的筛选结果:

ID ColA ColB ColC OtherCol
1  1    Y    N    Y        X
2  3    Y    Y    N        X
3  4    Y    N    Y        X

注意事项

如果数据中存在NA值,需要在求和时忽略NA,避免结果出错:

  • Base R:rowSums(df[target_cols] == "Y", na.rm = TRUE) >= 2
  • dplyr:sum(c_across(all_of(target_cols)) == "Y", na.rm = TRUE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:01:24