我正在处理一个包含遗传变异信息的tsv文件。由于此信息来自多个数据库,因此我的文件包含重复数据。在我的例子中,数据库是"dbSNP",它包含各种变体(良性和致病性的,其名称以“rs”开头)和"HGMD-PUBLIC“(在我的例子中,仅包含致病性的变体,其名称以”CM“开头)。
以下是一些示例数据:
variant_name <- c("rs1320425680", "rs1217211965", "rs1257939387", "rs74315401", "CM890102")
variant_source <- c("dbSNP", "dbSNP", "dbSNP", "dbSNP", "HGMD_PUBLIC")
chromosome <- c(20, 20, 20, 20, 20)
position_start <- c(4699513, 4699516, 4699520, 4699525, 4699525)
position_end <- c(4699513, 4699516, 4699520, 4699525, 4699525)
ancestral_allele <- c("A", "G", "C", "C", "C")
clinical_significance <- c(NA, NA, NA, "pathogenic", NA)
variant_alleles <- c("A/C", "G/A/T", "C/G", "C/T", "HGMD_MUTATION")
example <- tibble(variant_name, variant_source, chromosome, position_start, position_end, ancestral_allele, clinical_significance, variant_alleles)在这里,第4行和第5行实际上是来自两个不同数据库的相同变体的副本。对我来说重要的是要知道这两个变量都出现了。
我想要做的是将数据扩展为“宽”格式,增加两个新列:dbSNP和HGMD_PUBLIC (目前位于variant_source中)。这些列将包含最初在列variant_name中找到的条目,如下所示:
dbSNP <- c("rs1320425680", "rs1217211965", "rs1257939387", "rs74315401")
HGMD_PUBLIC <- c(NA, NA, NA, "CM890102")
chromosome <- c(20, 20, 20, 20)
position_start <- c(4699513, 4699516, 4699520, 4699525)
position_end <- c(4699513, 4699516, 4699520, 4699525)
ancestral_allele <- c("A", "G", "C", "C")
clinical_significance <- c(NA, NA, NA, "pathogenic")
variant_alleles <- c("A/C", "G/A/T", "C/G", "C/T")
result <- tibble(dbSNP, HGMD_PUBLIC, chromosome, position_start, position_end, ancestral_allele, clinical_significance, variant_alleles)如您所见,第5行不再存在,但是variant_name已经移到了dbSNP或HGMD_PUBLIC列。也许可以使用spread函数来实现上述功能,使重排以名称为条件,但我不知道如何做到这一点。
发布于 2021-01-11 23:15:21
下面是一个使用dcase + fcoalesce的data.table选项
dcast(
setDT(example),
... ~ variant_source,
value.var = "variant_name"
)[,
lapply(.SD, function(x) fcoalesce(as.list(x))),
by = chromosome:ancestral_allele
]这给了我们
chromosome position_start position_end ancestral_allele
1: 20 4699513 4699513 A
2: 20 4699516 4699516 G
3: 20 4699520 4699520 C
4: 20 4699525 4699525 C
clinical_significance variant_alleles HGMD_PUBLIC dbSNP
1: <NA> A/C <NA> rs1320425680
2: <NA> G/A/T <NA> rs1217211965
3: <NA> C/G <NA> rs1257939387
4: pathogenic HGMD_MUTATION CM890102 rs74315401https://stackoverflow.com/questions/65668102
复制相似问题