如何在R语言中筛选多列含Paracetamol的数据集行?
解决方案
针对你的需求,这里提供两种常用的R语言实现方法,可快速筛选出任意Medication1至Medication50列中包含"Paracetamol"(不区分大小写)的行:
方法一:Base R 原生实现
# 匹配所有以Medication开头的列(自动覆盖Medication1到Medication50) med_cols <- grep("^Medication\\d+$", names(df), value = TRUE) # 检查每行是否存在匹配"Paracetamol"的内容(忽略大小写) has_paracetamol <- rowSums(sapply(df[med_cols], function(x) grepl("paracetamol", x, ignore.case = TRUE))) > 0 # 筛选符合条件的行 filtered_df <- df[has_paracetamol, ]
方法二:tidyverse/dplyr 简洁实现
如果你熟悉tidyverse工具链,这种写法更直观:
library(dplyr) filtered_df <- df %>% filter(if_any(starts_with("Medication"), ~ grepl("paracetamol", ., ignore.case = TRUE)))
关键说明
starts_with("Medication")会自动匹配所有以"Medication"开头的列,无需手动枚举50列的名称。grepl(..., ignore.case = TRUE)确保大小写不影响匹配,不管是"Paracetamol"还是"paracetamol"都能被识别。if_any函数负责检查每行的任意药物列是否满足条件,只要有一列符合就保留该行。
用你提供的示例数据测试,最终会保留ID1和ID2对应的行(ID1的Medication1含paracetamol,ID2的Medication3含paracetamol)。
内容的提问来源于stack exchange,提问作者NoobR
相关产品推荐
相关产品推荐

