我收到了一个数据集,其中包含由下划线连接的短语,如下所示:
text <- "hi, how_are_you? that's_great. yes_i'm_als0_@k"
在此示例中,数据包含数字,符号,标点和空格。我想用下划线替换下划线出现3次或更多次(如yes_i'm_als0_@k
中的下划线)。所需的输出是:
"hi, how_are_you? that's_great. yes i'm als0 @k"
另一种表达方式,我收到了一个带有硬编码ngram的数据集,我想保留unigram,bigrams和trigram。
答案 0 :(得分:1)
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"