【问题标题】:Extracting parts of character string with gsub使用 gsub 提取部分字符串
【发布时间】:2019-09-30 15:23:06
【问题描述】:

我对 R 很陌生,现在正在使用由我和我的主管编写的脚本。 不幸的是,我无法将 gsub() 的一个实例用于我的样本名称。 以前的版本看起来像这样(前后在整个 df 中变化):

"1: Anterior LN_60_026.fcs"   

并使用

拆开
cell.counts$EH_ID <- gsub("\\d+: (Anterior|Posterior) LN_(\\d{2})_\\d{3}.fcs", "LM02\\2", cell.counts$Sample)
cell.counts$Position <- gsub("\\d+: (Anterior|Posterior) LN_(\\d{2})_\\d{3}.fcs", "\\1", cell.counts$Sample)

现在我面临一个类似的问题,需要进行一些细微的调整。因为我不知道 gsub() 语法是如何工作的,所以我被困住了:

"1: mLN_681_030.fcs"     

MLN 和脾脏在整个 df 中发生变化,我尝试调整的代码不再起作用:

cells$Mouse_ID <- gsub("\\d+: (mLN|spleen)(_\\d{2})_\\d{3}_\\.fcs", "AA_0\\2", cells$Sample)
cells$tissue <- gsub("\\d+: (mLN|spleen)_(\\d{3})_\\d{3}.fcs", "\\1", cells$Sample)

我应该补充一点,“组织”分离有效,但样本数提取无效。 如果有人能向我解释我做错了什么以及这段代码中的字符具体做了什么,我将不胜感激。 P.S.:是的,我使用过 ?gsub,但我发现 R 中的帮助文件对初学者很不友好,也不太了解。

【问题讨论】:

  • gsub 使用正则表达式。这个网站 (regular-expressions.info) 是一个很好的参考。而这个 (regexr.com) 有一个很好的工具来交互式测试它们。

标签: r string gsub extraction


【解决方案1】:

您希望鼠标 ID 行的第二个捕获组中正好有 2 位数字,并且您的文件名前有一个尾随下划线。

此外,在第二个正则表达式中,您还没有转义 .,它仍然有效,因为未转义的 . 将匹配任何字符,但应该是 \\.,如下所示。

# > str <- "1: mLN_681_030.fcs"
# > gsub(str, pattern="\\d+: (mLN|spleen)(_\\d{3})_\\d{3}\\.fcs", replacement = "AA_0\\2")
# [1] "AA_0_681"
# > gsub(str, pattern = "\\d+: (mLN|spleen)_(\\d{3})_\\d{3}\\.fcs", replacement = "\\1")
# [1] "mLN"

【讨论】:

  • 谢谢!这很有效,看起来几乎是应该的。但是如何去掉“0”后面的“_”呢?我应该指定结果应该是“AA_XXXX”
  • 将下划线移出捕获组 "\\d+: (mLN|spleen)(_\\d{3})_\\d{3}\\.fcs" -> "\\d+: (mLN|spleen)_(\\d{3})_\\d{3}\\.fcs" () 定义正则表达式捕获的内容,并在这种情况下可在编号输出中访问 "\\2"跨度>
猜你喜欢
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
相关资源
最近更新 更多