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

时间:2017-03-31 05:25:23

标签: r purrr

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

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

3 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:1)

由于这是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)

答案 2 :(得分:0)

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

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