繁体   English   中英

如何对数据框进行子集化以包含包含某个单词的所有元素

[英]how to subset data frame to contain all elements that contain a certain word

数据框

我想对我的数据框进行子集化以包含所有包含“抑制剂”一词的元素。 我想保留整个元素。 例如,我有一个新的数据框,其中包含:342 种肾素抑制剂、342 种肾素抑制剂、216 种 ALPHA-葡萄糖苷酶抑制剂等。

这不起作用

library(dplyr)
a = data.frame(col1 = c('drug', 'drug', 'drug'),
               col2 = c('drug-inhibitor', 'drug inhibitor2', 'drug'),
               col3= c('drug inhibitor3', 'drug inhibitor4', 'drug'))
x <- a %>% filter(grepl('inhibitor', a[,2:3]))

在编码示例中,我想要一个新的数据框:drug-inhibitor、drug inhibitor2、drug inhibitor3、drug inhibitor4

对于基本 R 选项,我们可以在行模式下使用apply()grepl()

a[apply(a, 1, function(r) any(grepl("inhibitor", r, fixed=TRUE))), ]

  col1            col2            col3
1 drug  drug-inhibitor drug inhibitor3
2 drug drug inhibitor2 drug inhibitor4

数据:

a <- data.frame(col1=c('drug', 'drug', 'drug'),
                col2=c('drug-inhibitor', 'drug inhibitor2', 'drug'),
                col3=c('drug inhibitor3', 'drug inhibitor4', 'drug'))

您也可以使用str_detect() ,例如

library(dplyr)
library(stringr)
a <- data.frame(
  col1 = c("drug", "drug", "drug"),
  col2 = c("drug-inhibitor", "drug inhibitor2", "drug"),
  col3 = c("drug inhibitor3", "drug inhibitor4", "drug")
)

a %>%
  filter(if_any(everything(), ~ stringr::str_detect(string = ., pattern = "inhibitor")))

Output:

  col1            col2            col3
1 drug  drug-inhibitor drug inhibitor3
2 drug drug inhibitor2 drug inhibitor4

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM