如何在R语言中筛选多列含特定字符串(CTX-M)的DataFrame行
筛选包含"CTX-M"的样本行方法
针对你构建的这个DataFrame,我给你两种常用的实现方式,你可以根据自己的习惯选择:
方法一:Base R 原生实现
这种方法不需要额外安装包,直接用base R的函数就能搞定:
# 筛选条件:检查每行的bla_1/bla_2/bla_3列中是否存在"CTX-M" filtered_df <- df[rowSums(df[, c("bla_1", "bla_2", "bla_3")] == "CTX-M", na.rm = TRUE) > 0, ]
代码解释:
df[, c("bla_1", "bla_2", "bla_3")] == "CTX-M":生成一个布尔矩阵,对应位置如果是"CTX-M"就返回TRUE,否则FALSE(NA会被保留为NA)rowSums(..., na.rm = TRUE):对每行的布尔值求和(TRUE计为1,FALSE计为0),na.rm = TRUE用来忽略NA值,避免求和结果变成NA- 最后用
> 0判断每行是否至少有一个"CTX-M",筛选出符合条件的行
方法二:用dplyr包(tidyverse风格)
如果你习惯用tidyverse系列的工具,dplyr的写法会更直观:
首先确保你已经安装并加载了dplyr:
install.packages("dplyr") library(dplyr)
然后执行筛选:
filtered_df <- df %>% filter(if_any(starts_with("bla"), ~ .x == "CTX-M"))
代码解释:
starts_with("bla"):自动选中所有列名以"bla"开头的列(也就是bla_1、bla_2、bla_3),如果后续列名有变化,这个写法也能自动适配if_any(..., ~ .x == "CTX-M"):检查选中的列中是否任意一列满足等于"CTX-M"的条件,只要有一列满足就保留该行
两种方法最终得到的结果都是保留样本A、B、C、D这四行,样本E会被过滤掉。
内容的提问来源于stack exchange,提问作者Maho
相关产品推荐
相关产品推荐

