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

在R中,删除作为其他字符子字符串的字符串中的所有字符,r,grepl,R,Grepl,这是一个简单的玩具示例。我只想保留最短的子字符串。我们保留AB,可以排除ABC。我们之所以保留BD和ADB,是因为没有langer字符也具有这种模式 have <- c('AB', 'BD', 'ADB', 'ABC') want <- c('AB', 'BD', 'ADB') have这里是一个基本的R方法: have <- c('AB', 'BD', 'ADB', 'ABC') keep <- sapply(have, function(x) grepl(paste

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

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

have这里是一个基本的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"

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

Tim,在这个场景中是否可以使用regex lookahead?为什么要这样做?我想迭代每个字符串,并使用lookahead查看向量中的其他字符串中是否存在该模式。
AB|BD|ABD