[英]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.