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

如何使用dplyr同时在多列中筛选多个指定数值?

用dplyr在多列中筛选包含指定数值的记录

没问题,我来帮你搞定这个需求!先看你的数据集,里面有多个手术编号相关的列,咱们要从中筛选出包含指定数值的记录对吧?下面分两种常见场景给你演示:

场景1:任意指定列包含目标数值就保留记录

如果你的需求是只要患者的任意一个手术编号列里出现了你要找的数值,就保留这条记录,可以用dplyr的if_any()函数来实现,非常简洁:

首先,先加载dplyr并定义你的数据集(先把你的代码放出来方便验证):

library(dplyr)

# 你的原始数据集
PatientNum<- c(1, 2, 3, 4, 5)
Age<- c(10, 21, 51, 42, 35)
SurgicalProcedureNumber <- c(21356, 21424, 221356, 12345, 54321)
OtherSurgicalProcedureNumber <- c(54321, 21356, 12345, 12345, 21424)
BloodLoss<-c(5,4,5,10,5)
YetAnotherSurgicalProcedureNumber<-c(11111,22222,33333,21356,555555)
dataset <- data.frame(PatientNum, Age, SurgicalProcedureNumber, OtherSurgicalProcedureNumber, BloodLoss,YetAnotherSurgicalProcedureNumber)

接下来,定义你要筛选的目标数值,以及要检查的列:

# 指定要找的数值
target_values <- c(21356, 12345)
# 指定要检查的手术编号列
procedure_cols <- c("SurgicalProcedureNumber", "OtherSurgicalProcedureNumber", "YetAnotherSurgicalProcedureNumber")

然后用filter() + if_any()筛选:

filtered_data <- dataset %>%
  filter(if_any(all_of(procedure_cols), ~ .x %in% target_values))

# 查看结果
filtered_data

运行后你会得到包含Patient 1、2、3、4的记录,因为他们的手术列里至少有一个值是21356或12345,而Patient 5的手术列里没有这两个值,所以被排除了。

如果你列数不多,也可以直接用逻辑或(|)写条件,更直观:

filtered_data <- dataset %>%
  filter(
    SurgicalProcedureNumber %in% target_values |
    OtherSurgicalProcedureNumber %in% target_values |
    YetAnotherSurgicalProcedureNumber %in% target_values
  )

场景2:所有指定列都必须包含目标数值才保留记录

如果你的需求更严格,要求患者的所有手术编号列里都至少包含一个目标数值,那就把if_any()换成if_all():

filtered_data_all <- dataset %>%
  filter(if_all(all_of(procedure_cols), ~ .x %in% target_values))

# 查看结果
filtered_data_all

这次只有Patient 4会被保留,因为他的三个手术列分别是12345、12345、21356,都属于目标数值范围;其他患者的手术列里至少有一个不匹配目标值,所以被排除了。

关键知识点解释

  • %in%:用来判断某个值是否在指定的向量里,是筛选的核心逻辑
  • if_any()/if_all():dplyr 1.0.0+版本引入的函数,用来对多列应用同一个条件,分别对应“任意列满足”和“所有列满足”
  • all_of():用来引用字符向量形式的列名,确保dplyr正确识别你指定的列,避免列名被当作变量处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:39:42