首页 > 解决方案 > R:替换下划线非连续重复两次以上

问题描述

我收到了一个数据集,其中的短语由下划线连接,如下所示:

text <- "hi, how_are_you? that's_great. yes_i'm_als0_@k"

如本例所示,数据包含数字、符号、标点符号和空格。yes_i'm_als0_@k我想用单个空格替换下划线出现 3 次或更多次(如 in )。所需的输出是:

"hi, how_are_you? that's_great. yes i'm als0 @k"

另一种说法是,我收到了一个包含硬编码 ngram 的数据集,我想保留 unigrams、bigrams 和 trigrams。

标签: rregex

解决方案


gsubfn类似于gsub但不是用固定字符串替换第一个参数中指定的正则表达式的出现,而是将匹配项传递给第二个参数中指定的函数,用函数的输出替换输入。该函数可以用公式表示法指定,其中函数的主体位于右侧,而参数(此处s为 )是通过在右侧找到自由变量来确定的。

library(gsubfn)

gsubfn("\\S+", 
  ~ if (length(unlist(gregexpr("_", s))) >= 3) gsub("_", " ", s) else s, 
  text)

给予:

[1] "hi, how_are_you? that's_great. yes i'm als0 @k"

推荐阅读