【问题标题】:strip words out of a character从字符中删除单词
【发布时间】:2014-12-08 09:54:24
【问题描述】:

我有一个角色,“vars”。

vars=c("cogD", "relevel(cbsnivcat3f, \"Lower\")", "relevel(leidingf, \"geen\")", 
"relevel(ocdisf, \"Law\")")

我只想得到“(”和“,”之间的单词,所以括号和逗号之间的单词,例如,relevel(cbsnivcat3f, \"Lower\") only "cbsnivcat3f"

我的目标是:vars= c("cogD","cbsnivcat3f","leidingf”,"ocdisf")

【问题讨论】:

  • 你是怎么得到vars的,也许你应该修正上一步?

标签: r character gsub


【解决方案1】:

试试正则表达式:

gsub("relevel\\((.*?), .*", "\\1", vars)
[1] "cogD"        "cbsnivcat3f" "leidingf"    "ocdisf"   

【讨论】:

  • 感谢一百万 @Andrie。你能解释一下“\\1”部分吗?谢谢
  • 我发现了这个link,它包含一个语法概述和一个视图示例,对于那些想知道 \\1 是什么的人来说很方便。
【解决方案2】:

我维护的qdapRegex 中的rm_between 函数允许您在左右边界之间抓取子字符串。这对这种情况很有效。在最后一步中,我们将任何 NAs 替换为原始值。

library(qdapRegex)
out <- unlist(rm_between(vars, "(", ",", extract=TRUE))
out[is.na(out)] <- vars[is.na(out)]
out

## [1] "cogD"        "cbsnivcat3f" "leidingf"    "ocdisf" 

幕后的正则表达式是:"(().*?(,)",也可以与 base、stringistringr 方法一起使用。

【讨论】:

  • 谢谢@Tyler Rinker。在 R3.0.2 上运行的 qdapRegex 是否有更新? “qdapRegex' 不可用(对于 R 版本 3.0.2)”
  • 我想如果你使用:install.packages("qdapRegex", type="source") 它仍然会安装。如果不下载 zip/tar.ball 并以这种方式从源安装。
  • 谢谢@Tyler Rinker,我会试一试。
猜你喜欢
  • 2014-11-21
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2017-03-27
  • 2017-07-17
相关资源
最近更新 更多