【发布时间】:2020-11-12 04:09:26
【问题描述】:
我正在尝试使用 mutate/str_replace 通过删除括号(包括内容)从“类”生成“表型”,但需要一些正则表达式的帮助? 然后,我还想重新排序“表型”字符串中的文本,使文本按 PanCK>PD-L1>CD8>FoxP3>PD-1>CD68 的顺序显示。 为非标准数据集道歉! 非常感谢!
test<- data.frame(Class = c("FoxP3 (Opal 570): PanCK (Opal 690): PD-1 (Opal 620): CD68 (Opal 780)"
, "CD8 (Opal 480): PanCK (Opal 690): CD68 (Opal 780): PD-L1 (Opal 520)", "PanCK (Opal 690): CD68 (Opal 780)",
"FoxP3 (Opal 570): PanCK (Opal 690)"))
我遇到的问题
test.output<- test %>% mutate(Phenotype = str_replace(Class, "\\([^()]{0,}\\)", ""))
想要的输出:
test.output <- data.frame(Class = c("FoxP3 (Opal 570): PanCK (Opal 690): PD-1 (Opal 620): CD68 (Opal 780)"
, "CD8 (Opal 480): PanCK (Opal 690): CD68 (Opal 780): PD-L1 (Opal 520)",
"PanCK (Opal 690): CD68 (Opal 780)", "FoxP3 (Opal 570): PanCK (Opal 690)"),
Phenotype = c("FoxP3:PanCK:PD-1:CD68", "CD8:PanCK:CD68:PD-L1",
"PanCK:CD68", "CD8:PanCK:CD68:PD-L1"))
然后重新排序,使得 PanCK>PD-L1>CD8>FoxP3>PD-1>CD68
ordered.output<- data.frame(Class = c("FoxP3 (Opal 570): PanCK (Opal 690): PD-1 (Opal 620): CD68 (Opal 780)"
, "CD8 (Opal 480): PanCK (Opal 690): CD68 (Opal 780): PD-L1 (Opal 520)",
"PanCK (Opal 690): CD68 (Opal 780)", "FoxP3 (Opal 570): PanCK (Opal 690)"),
Phenotype = c("FoxP3:PanCK:PD-1:CD68", "CD8:PanCK:CD68:PD-L1",
"PanCK:CD68", "CD8:PanCK:CD68:PD-L1"),
Phenotype_Ordered = c("PanCK:FoxP3:PD-1:CD68", "PanCK:PD-L1:CD8:CD68",
"PanCK:CD68","PanCk:PD-L1:CD8:CD68"))
【问题讨论】:
-
删除括号及其内容是重复的of this question - 也许您可以在此处应用答案并编辑此问题以专注于重新排序?
-
您的正则表达式的想法是正确的,我认为您只需将
str_replace(替换第一个匹配项)更改为str_replace_all(替换所有匹配项)。 -
谢谢!我确实阅读了该线程,但是我看不到它如何应用于单个字符串中的多个括号 - 这是标准 tidyverse 示例之外的
str_replace_all的一个很好的示例。