繁体   English   中英

在 R 中删除作为其他字符的子字符串的字符串中的所有字符

[英]In R remove all characters in string that is substring of other character

这是一个简单的玩具示例。 我只想保留最短的子字符串。 AB 我们保留而 ABC 可以排除。 我们保留 BD 和 ADB,因为没有 langer 字符也具有这种模式。

have <- c('AB', 'BD', 'ADB', 'ABC')
want <- c('AB', 'BD', 'ADB')

grepl 在这里非常有用,但我不确定如何使其具有计算效率。

这是一个基本的R方法:

have <- c('AB', 'BD', 'ADB', 'ABC')
keep <- sapply(have, function(x) grepl(paste0(have[!have %in% x], collapse="|"), x))
want <- have[!keep]
want

[1] "AB"  "BD"  "ADB"

这里的想法是,对于输入向量中的每个条目,构建一个由剩余项组成的正则表达式交替。 因此,当sapply达到最终值ABC ,我们形成以下正则表达式交替:

AB|BD|ABD

然后,我们使用grepl来查看是否可以找到任何属于ABC子字符串的条目。 在这种情况下,我们可以使用AB ,然后我们将其标记为 true。 最后,我们使用这个布尔向量对输入向量进行子集化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM