r - 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。
解决方案
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"
推荐阅读
- javascript - React - 创建和更新数据库模型、继承或组合的组件?
- google-apps-script - 仅从一张纸复制值并粘贴到另一张纸上
- c - 为什么 argv 的第一个参数是 1 而不是 0
- ruby-on-rails - Capistrano/Passenger 错误@nginx 使用 nokogiri - 库版本不兼容
- java - 需要帮助计算驾驶汽油成本
- vue.js - 发生父级更新时,子级发出事件会冻结 UI
- javascript - 登录到 Chrome 控制台的对象具有不存在的属性
- xml - PowerShell XML 导出到 CSV - 无法获得一些子值
- c# - 单元测试中的 ActionResult 问题无法在 POST 返回值上断言.Equal (asp.net core mvc web api)
- python - 定义pandas dataframe的具体json导出格式