在R语言中如何删除字符向量中的重复字符串
R语言删除字符向量内单字符串重复单词的实现方案
你给出的场景是删除单个字符串内连续出现的重复单词,以下是两种可直接复用的实现方式:
方法1:基础正则替换(无需额外依赖包,推荐)
直接通过gsub匹配连续重复的单词做替换,仅删除连续重复的内容,符合你的示例需求:
# 定义原始向量 original <- c("hi hi there", "hello you", "you good you good") # 执行去重 desired <- gsub("\\b(\\S+)(?:\\s+\\1)+\\b", "\\1", original, perl = TRUE) # 验证输出 print(desired) # 输出结果:[1] "hi there" "hello you" "you good"
正则逻辑说明:
\\b匹配单词边界,避免误匹配单词内部的重复字符(\\S+)为捕获组,匹配单个完整单词(?:\\s+\\1)+匹配1次及以上的「空白符 + 捕获组匹配到的相同单词」- 最终替换为
\\1即仅保留单次的单词,去除重复部分
方法2:拆分后去重拼接(适合自定义去重规则)
如果需要灵活调整去重逻辑(比如删除所有重复单词,不管是否连续),可以用拆分再处理的方式:
# 所有重复单词都删除(无论是否连续) desired <- sapply(strsplit(original, "\\s+"), function(x) paste(unique(x), collapse = " ")) # 仅删除连续重复单词的版本 desired <- sapply(strsplit(original, "\\s+"), function(x) { paste(x[!c(FALSE, x[-1] == x[-length(x)])], collapse = " ") })
内容的提问来源于stack exchange,提问作者lf208
相关产品推荐
相关产品推荐

