亲爱的StackOverflow社区
我是一名生物学家,正在研究ClinVar官方数据库中的疾病/遗传变异。我的目的是从该列表中提取所有基因名称,转录本和变体。
ftp://ftp.ncbi.nlm.nih.gov/pub/clinvar/xml/ClinVarFullRelease_2020-01.xml.gz
但是,ClinVar在名为“名称”的单个列中提供了我需要的信息。 (在下表的示例中,我用一些不同的结果分隔了一些值:)
Name ClinicalSignificance
1 NG_012236.2:g.11027del Pathogenic
2 NM_018077.3(RBM28):c.1052T>C (p.Leu351Pro) Pathogenic
3 NC_012920.1:m.7445A>G Pathogenic
4 m.7510T>C Pathogenic
5 NC_000023.11:g.(134493178_134493182)_(134501172_134501176)del Pathogenic
(还有其他类型的数据,但是由于它不包含我需要的信息,因此将其视为垃圾)
我正在寻找一种使用多个分隔符将“名称”列拆分为其他3列的方法。我尝试使用“ |”作为多个匹配项的正则表达式参数的一部分。但是,每次工作时,都将已分离的数据发送到右侧的列。我的代码:
ClinVar_Clean <- separate(ClinVar_Clean, Name, into = c("Transcript","gene.var"),sep = "(?<=\\.[0-9]{1,2})[(]|(?<=[0-9]{3,16}\\.[0-9]{1,2}):|(?=[cmpng]\\.)")
ClinVar_Clean <- separate(ClinVar_Clean, gene.var, into = c("Gene","Variant"),sep = "\\):|(?=[cmpng]\\.)")
我的结果:
Transcript Gene Variant ClinicalSignificance
1 NG_012236.2 <NA> Pathogenic
2 NM_018077.3 RBM28 Pathogenic
3 NC_012920.1 <NA> Pathogenic
4 m.7510T>C Pathogenic
5 NC_000023.11 <NA> Pathogenic
结果应如何显示:
Transcript Gene Variant ClinicalSignificance
1 NG_012236.2 g.11027del Pathogenic
2 NM_018077.3 RBM28 c.1052T>C (p.Leu351Pro) Pathogenic
3 NC_012920.1 m.7445A>G Pathogenic
4 m.7510T>C Pathogenic
5 NC_000023.11 g.(134493178_134493182)_(134501172_134501176)del Pathogenic
我还尝试过单独执行每个分隔符,而不是将数据右移,但是它也会覆盖其余数据。
[如果有人可以帮助,请多谢!
我试图用一个extract
/ separate
来做到这一点,但我无法给出确切的预期输出。因此,这里尝试使用str_extract
中的stringr
和基数R中的sub
将其分解为单独的步骤。
library(dplyr)
library(stringr)
df %>%
mutate(Transcript = str_extract(Name, ".*(?<=:)"),
Gene = str_extract(Transcript, "(?<=\\().*(?=\\))"),
Variant = sub(".*:(.*)", "\\1", Name)) %>%
select(Transcript, Gene, Variant)
# Transcript Gene Variant
#1 NG_012236.2: <NA> g.11027del
#2 NM_018077.3(RBM28): RBM28 c.1052T>C(p.Leu351Pro)
#3 NC_012920.1: <NA> m.7445A>G
#4 <NA> <NA> m.7510T>C
#5 NC_000023.11: <NA> g.(134493178_134493182)_(134501172_134501176)del
在Transcript
中,我们捕获了冒号之前的所有内容。
对于Gene
,我们得到Transcript
中带括号的字符。
对于Variant
,我们在冒号之后得到所有信息。
数据
df <- structure(list(Name = structure(c(4L, 5L, 3L, 1L, 2L), .Label = c("m.7510T>C",
"NC_000023.11:g.(134493178_134493182)_(134501172_134501176)del",
"NC_012920.1:m.7445A>G", "NG_012236.2:g.11027del",
"NM_018077.3(RBM28):c.1052T>C(p.Leu351Pro)"
), class = "factor"), ClinicalSignificance = structure(c(1L,
1L, 1L, 1L, 1L), .Label = "Pathogenic", class = "factor")), class =
"data.frame", row.names = c("1", "2", "3", "4", "5"))