purrr::discard 如何删除包含一个或多个特定字符串的向量中的元素

purrr::discard How to delete elements in a vector containing one or more specific strings

我想使用 purrr 中的 discard 函数删除向量中包含“_1”和“_3”的元素。这里的例子:

library(purrr)
x <- c("ABAC_13", "ZDRF73", "UYDS_12", "FGSH41", "GFSC_35" , "JHSC_29") 

由于这是 tidyverse 特有的,我们可以使用它特有的语法

library(tidyverse)
str_detect(x, "_[13]") %>%
                  discard(x, .)
#[1] "ZDRF73"  "FGSH41"  "JHSC_29"

如果我们需要删除元素

grep("_\d+", x, invert = TRUE, value = TRUE)
#[1] "ZDRF73" "FGSH41"

或者如果它特定于 1、3

grep("_[13]", x, invert = TRUE, value = TRUE)
#[1] "ZDRF73"  "FGSH41"  "JHSC_29"

如果我们需要去掉子串部分,

sub("_\d+", '', x)

可以使用 grepl() 执行此任务。基本上我们想要找到包含 _1_3 的事件。 grepl 输出是 TRUE/FALSE 的逻辑向量。接下来,我们通过使用子集和取反运算符从 x 向量中删除这些元素,即 x[!grepl("_1|_3", x)].

x <- c("ABAC_13", "ZDRF73", "UYDS_12", "FGSH41", "GFSC_35" , "JHSC_29") 
x[!grepl("_1|_3", x)]

对于discard,我们需要提供一个逻辑向量来指示我们需要丢弃哪些值。

为了创建逻辑向量,我们使用 grepl 为具有“_1”或“_3”的元素提供 TRUE 值

library(purr)
discard(x, grepl("_1|_3", x))

#[1] "ZDRF73"  "FGSH41"  "JHSC_29"