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