我试图用空格替换向量中的字符串元素的子串。以下是我们正在考虑的载体:
test <- c("PALMA DE MALLORCA", "THE RICH AND THE POOR", "A CAMEL IN THE DESERT", "SANTANDER SL", "LA")
lista <- c("EL", "LA", "ES", "DE", "Y", "DEL", "LOS", "S.L.", "S.A.", "S.C.", "LAS",
"DEL", "THE", "OF", "AND", "BY", "S", "L", "A", "C", "SA", "SC", "SL")
然后,如果我们按原样应用mgsub
函数,我们会得到以下输出:
library(qdap)
mgsub(lista, "", test)
# [1] "PM MOR" "RIH POOR" "M IN ERT" "NTER" ""
所以我将列表更改为以下内容并重新执行:
lista <- paste("\\b", lista, "\\b", sep = "")
mgsub(lista, "", test)
# [1] "PALMA DE MALLORCA" "THE RICH AND THE POOR" "A CAMEL IN THE DESERT"
# [4] "SANTANDER SL" "LA"
我无法让单词boundary regex适用于此函数。
答案 0 :(得分:2)
根据multigsub {qdap}
documentation:
mgsub(pattern, replacement = NULL, text.var, leadspace = FALSE, trailspace = FALSE, fixed = TRUE, trim = TRUE, ...)
...
的fixed
强>
逻辑。如果是TRUE
,则pattern是要按原样匹配的字符串。覆盖所有冲突的参数。
为确保您的搜索字词向量被解析为正则表达式,您需要&#34;手动&#34;将fixed
参数设置为FALSE
。
另一个重要注意事项:.
之后设置的单词边界需要一个单词字符(或行尾)。在这种情况下使用(?!\w)
子模式更安全。要在R regex中使用环视,您需要使用类似Perl的正则表达式。因此,我建议使用它(如果非单词字符只出现在正则表达式的末尾):
lista <- paste("\\b", lista, "(?!\\w)", sep = "")
或(如果开头也可能有非单词字符):
lista <- paste("(?<!\\w)", lista, "(?!\\w)", sep = "")
然后
mgsub(lista, "", test, fixed=FALSE, perl=TRUE)