首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:使用想要的子字符串列表清除字符串

R:使用想要的子字符串列表清除字符串
EN

Stack Overflow用户
提问于 2020-10-22 03:26:42
回答 2查看 21关注 0票数 1

我有一个带有字符串的数据

代码语言:javascript
复制
Clause <- c('Big Truck Pb Anomaly Low', 'Red Truck Fe Anomaly High', 'Blue Truck Pb Anomaly High & Old Truck Fe Anomaly Low')
Input <- data.frame(Clause)

我想通过只保留在清洗列表中找到的子串来清除该字符串;

代码语言:javascript
复制
Keepers <- c('Anomaly', 'Low', 'High', '&', 'Pb', 'Fe', ' ', 'SomethingNotPresent')

期望的结果如下。

代码语言:javascript
复制
Wanted <- c('Pb Anomaly Low', 'Fe Anomaly High', 'Pb Anomaly High & Fe Anomaly Low')
Result <- data.frame(Wanted)

注意:“Keepers”列表还将包含“SomethingNotPresent”之类的项。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-22 03:41:28

您可以在每个单词处拆分字符串,并只保留每一行的Keepers单词。

代码语言:javascript
复制
sapply(strsplit(Input$Clause, '\\s+'), function(x) 
       paste0(x[x %in% Keepers], collapse = ' '))

#[1] "Pb Anomaly Low"     "Fe Anomaly High"     "Anomaly High & Fe Anomaly Low"
票数 2
EN

Stack Overflow用户

发布于 2020-10-22 03:35:25

你可以形成一个标准交替的白色条款,以保持。然后使用一个负的展望模式来识别应该删除的所有术语/空格:

代码语言:javascript
复制
alternation <- paste(Keepers, collapse="|")
regex <- paste0("\\s*(?!(?:", alternation, "))(?<!\\S)\\S+(?!\\S)\\s*")
df$clause <- gsub("\\s+", " ", trimws(gsub(regex, " ", df$clause, perl=TRUE)))
df

                            clause
1                   Pb Anomaly Low
2                  Fe Anomaly High
3 Pb Anomaly High & Fe Anomaly Low

数据:

代码语言:javascript
复制
inp <- c('Big Truck Pb Anomaly Low', 'Red Truck Fe Anomaly High',
         'Blue Truck Pb Anomaly High & Old Truck Fe Anomaly Low')
df <- data.frame(clause=inp, stringsAsFactors=FALSE)
Keepers <- c('Anomaly', 'Low', 'High', '&', 'Pb', 'Fe', ' ', 'SomethingNotPresent')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64474853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档