我正在处理R中的一些字符数据,并且我有一些部分在字符串的中间有(foo)(foo)。反正是自动找到那些重复,并删除它们(将它们表示为(foo)在同一位置)?
我想知道一个可能的解决方案是使用strsplit by),并检查是否有任何等价,然后重新加载)。这会有用吗?
实施例。 string:“abc def(foo)(foo)abc def”
答案 0 :(得分:3)
您可以在R中使用perl正则表达式替换,如下例所示:
test <- "abc def (foo)(foo) abc def"
gsub('(\\(\\w+\\))\\1','\\1',test,perl=TRUE)
或者,您可以预先运行perl one-liner来清理数据:
echo "abc def (foo)(foo) abc def\n" | perl -ne 's/(\(\w+\))\1/$1/gi;print'
答案 1 :(得分:2)
这里有可能只保留序列中的第一个重复元素:
gsub("(.+)\\1+","\\1", x, perl=T)
HTH