寻找如何在 R 中使用带有多个分隔符的 separate() (ClinVar 变体数据处理)
Looking for how to use separate() with multiple separators in R (ClinVar variant data dealing)
尊敬的 Whosebug 社区
我是一名生物学家,我正在研究来自 ClinVar 官方数据库的 disease/genetic 变体。我的目标是从此列表中提取所有基因名称、转录本和变体。
ftp://ftp.ncbi.nlm.nih.gov/pub/clinvar/xml/ClinVarFullRelease_2020-01.xml.gz
但是,ClinVar 在一个名为 "Name" 的专栏中提供了我需要的信息。 (在下面的 table 示例中,我将一些具有不同结果的值分开:)
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
(还有其他类型的数据,但由于它不包含我需要的信息,我将其视为垃圾)
我正在寻找一种使用多个分隔符将 "Name" 列拆分为其他 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
来做到这一点,但我想不出哪个能给出准确的预期输出。因此,这里尝试使用来自 stringr
的 str_extract
和来自 base 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"))
尊敬的 Whosebug 社区
我是一名生物学家,我正在研究来自 ClinVar 官方数据库的 disease/genetic 变体。我的目标是从此列表中提取所有基因名称、转录本和变体。
ftp://ftp.ncbi.nlm.nih.gov/pub/clinvar/xml/ClinVarFullRelease_2020-01.xml.gz
但是,ClinVar 在一个名为 "Name" 的专栏中提供了我需要的信息。 (在下面的 table 示例中,我将一些具有不同结果的值分开:)
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
(还有其他类型的数据,但由于它不包含我需要的信息,我将其视为垃圾)
我正在寻找一种使用多个分隔符将 "Name" 列拆分为其他 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
来做到这一点,但我想不出哪个能给出准确的预期输出。因此,这里尝试使用来自 stringr
的 str_extract
和来自 base 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"))