![](/img/trans.png)
[英]Remove all the characters of the string that come after the "\" character in 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.