如何解决在R中,删除字符串中属于其他字符的子字符串的所有字符
这是一个简单的玩具示例。我只想保留最短的子字符串。我们保留的AB和ABC可以排除。我们保留BD和ADB,因为没有朗格字符也具有这种模式。
have <- c('AB','BD','ADB','ABC')
want <- c('AB','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。最后,我们使用此布尔向量对输入向量进行子集化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。