【问题标题】:Remove all characters except for certain string in R删除R中除某些字符串以外的所有字符
【发布时间】:2019-09-25 18:02:59
【问题描述】:

我正在尝试删除除我从 R 中的列中指定的特定字符串列表之外的所有字符。

我的数据:

oldlist <- c("ljwefhwordlsfk", "kjrghewletterweifj", "esjnumbersf", "ggkjherletter", "slrgjwordoggr")

我的预期结果:

desiredlist <- c("word", "letter", "number", "letter", "word")

我尝试过但不起作用的方法:

helpvector <- c("word", "letter", "number")

neuenummer <- gsub(paste0("[^", paste(helpvector, collapse=""), "]+"), "", oldlist)

【问题讨论】:

  • 您的预期输出是什么。如果是“desiredlist”,那么“oldlist”的第二个元素没有“list”
  • 对不起,我会编辑,预期的输出是desiredlist
  • 如果检查'oldlist'的第二个元素,则没有'list'
  • 现在这个例子应该是对的。感谢您指出。
  • 您使用helpvector 的理由是什么?我对那部分有点困惑。

标签: r regex gsub


【解决方案1】:

我们可以从stringr使用str_extract

library(stringr)
str_extract_all(oldlist, str_c(helpvector, collapse="|"), simplify = TRUE)[,1]
#[1] "word"   "letter" "number" "letter" "word"  

或者使用gregexpr/regmatches 来自base R

unlist(regmatches(oldlist, gregexpr(paste0(helpvector, collapse="|"), oldlist)))
#[1] "word"   "letter" "number" "letter" "word"  

【讨论】:

    【解决方案2】:
    library(stringi)
    library(dplyr)
    stri_extract_all_regex(oldlist, '(word|letter|number)') %>% unlist()
    [1] "word"   "letter" "number" "letter" "word"  
    

    【讨论】:

    • 谢谢,这个解决方案也很不错。
    • 一点也不。熟悉stringi 包。有很棒的帮助文档。
    猜你喜欢
    • 1970-01-01
    • 2017-09-01
    • 2013-02-16
    • 2018-03-23
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    相关资源
    最近更新 更多