簡體   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