如何解决进行突变以从R中的字符串中删除所有括号和内容
我正在尝试使用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)","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:PanCK:CD68:PD-L1"),Phenotype_Ordered = c("PanCK:FoxP3:PD-1:CD68","PanCK:PD-L1:CD8:CD68","PanCk:PD-L1:CD8:CD68"))
解决方法
这项工作:
st <- c('PanCK','PD-L1','CD8','FoxP3','PD-1','CD68')
test %>%
mutate(Phenotype = str_remove_all(Class,'\\s\\(Opal [0-9]{3}\\)')) %>%
mutate(Phenotype = str_remove_all(Phenotype,'(\\s)')) %>%
mutate(Phenotype_Ordered = str_split(Phenotype,':')) %>% unnest(Phenotype_Ordered) %>%
group_by(Class) %>% arrange(factor(Phenotype_Ordered,levels = st)) %>%
mutate(Phenotype_Ordered = paste(Phenotype_Ordered,collapse = ':')) %>% distinct()
# A tibble: 4 x 3
# Groups: Class [4]
Class Phenotype Phenotype_Ordered
<chr> <chr> <chr>
1 FoxP3 (Opal 570): PanCK (Opal 690): PD-1 (Opal 620): CD68 (Opal 780) FoxP3:PanCK:PD-1:CD68 PanCK:FoxP3:PD-1:CD68
2 CD8 (Opal 480): PanCK (Opal 690): CD68 (Opal 780): PD-L1 (Opal 520) CD8:PanCK:CD68:PD-L1 PanCK:PD-L1:CD8:CD68
3 PanCK (Opal 690): CD68 (Opal 780) PanCK:CD68 PanCK:CD68
4 FoxP3 (Opal 570): PanCK (Opal 690) FoxP3:PanCK PanCK:FoxP3
,
另一个技巧是:
my_order <- c("CD68","PD-1","FoxP3","CD8","PD-L1","PanCK")
test %>%
mutate(prototype = gsub('\\s*[(][^)]+[)]','',Class),ordered = map_chr(strsplit(prototype,'\\s*:\\s*'),~str_c(sort(ordered(.x,my_order),decreasing = TRUE),collapse = ":")))
Class prototype ordered
1 FoxP3 (Opal 570): PanCK (Opal 690): PD-1 (Opal 620): CD68 (Opal 780) FoxP3: PanCK: PD-1: CD68 PanCK:FoxP3:PD-1:CD68
2 CD8 (Opal 480): PanCK (Opal 690): CD68 (Opal 780): PD-L1 (Opal 520) CD8: PanCK: CD68: PD-L1 PanCK:PD-L1:CD8:CD68
3 PanCK (Opal 690): CD68 (Opal 780) PanCK: CD68 PanCK:CD68
4 FoxP3 (Opal 570): PanCK (Opal 690) FoxP3: PanCK PanCK:FoxP3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。