【问题标题】:How can I remove all elements from a vector that matches a pattern?如何从与模式匹配的向量中删除所有元素?
【发布时间】:2017-10-18 18:07:05
【问题描述】:
ncvars = c("prate", "arate", "wpd", "Atm1", "Atm2", "area", "fC", "bas__1", "bas__asssaa", "bas__Clow", "bas__g2333e", "baser__arge", "bas__Aow", "bas__Aass")   

现在,我想删除所有的元素

  • 正是名字area
  • 匹配这个字符串bas__

我该怎么做?


试用

patterns <- c("bas__", "area")
ncvars %>%
  filter(.,grepl(paste(patterns, collapse="|")))

【问题讨论】:

  • 已添加...........
  • 你能输入你的数据吗?
  • 与@Hardikgupta 的评论相吻合。如果您提供complete minimal reproducible example 来回答您的问题,我们更有可能为您提供帮助。我们可以轻松从中工作并使用它来向您展示如何可能回答您的问题。我知道您已经得到了答案,但是如果有 complete minimal reproducible example,您的问题和潜在答案对其他人会变得更加有用。

标签: r subset grepl


【解决方案1】:

您可以用! 否定grepl 并且要完全匹配,您需要^..$ 锚来匹配字符串的开始(^)和结束($):

ncvars[!grepl('^area$|bas__', ncvars)]

ncvars
# [1] "prate"       "arate"       "wpd"         "Atm1"        "Atm2"        "area"        "fC"          "bas__1"     
# [9] "bas__asssaa" "bas__Clow"   "bas__g2333e" "baser__arge" "bas__Aow"    "bas__Aass"  
ncvars[!grepl('^area$|bas__', ncvars)]
# [1] "prate"       "arate"       "wpd"         "Atm1"        "Atm2"        "fC"          "baser__arge"

【讨论】:

  • 周围区域的 ^ 和 $ 表示什么?谢谢。
  • 它们匹配字符串的开头和结尾。所以^area$ 完全匹配area 而不是作为子字符串。
  • 啊。非常感谢!
【解决方案2】:

tidyverse 解决方案:

library(stringr)
stringr::str_subset(ncvars, pattern = "^area$|^bas__", negate = TRUE)
[1] "prate"       "arate"       "wpd"         "Atm1"        "Atm2"        "fC"          "baser__arge"

【讨论】:

  • 此解决方案没有删除该元素 - 它只是将其删除
  • @ArthurYip:答案已根据 vlad1490 的建议改进进行了更新,删除了想要的元素。
最近更新 更多