微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

合并具有相同内容的行

如何解决合并具有相同内容的行

我正在处理一个包含遗传变异信息的 tsv 文件。鉴于此信息来自多个数据库,我的文件包含重复数据。在我的例子中,数据库是“dbSNP”,它包含各种变异(良性和致病变异,名称以“rs”开头)和“HGMD-PUBLIC”(在我的例子中只包含致病变异,名称以“rs”开头)用“CM”)。

以下是一些示例数据:

variant_name <- c("rs1320425680","rs1217211965","rs1257939387","rs74315401","CM890102")
variant_source <- c("dbSNP","dbSNP","HGMD_PUBLIC")
chromosome <- c(20,20,20)
position_start <- c(4699513,4699516,4699520,4699525,4699525)
position_end <- c(4699513,4699525)
ancestral_allele <- c("A","G","C","C")
clinical_significance <- c(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 行实际上是来自两个不同数据库的相同变体的副本。知道变体出现在两者中对我来说很重要。

我想要做的是将数据扩展为“宽”格式,包含两个新列:dbSNPHGMD_PUBLIC(目前位于 variant_source 中)。这些列将包含最初在 variant_name 列中找到的条目,如下所示:

dbSNP <- c("rs1320425680","rs74315401")
HGMD_PUBLIC <- c(NA,"CM890102")
chromosome <- c(20,"pathogenic")
variant_alleles <- c("A/C","C/T")

result <- tibble(dbSNP,HGMD_PUBLIC,variant_alleles)

如您所见,第 5 行不再存在,但 variant_name 已移至 dbSNPHGMD_PUBLIC 列。 也许上面的功能可以通过 spread 函数来实现,使重新排列以名称为条件,但我不知道该怎么做。

解决方法

这是一个使用 data.table + dcase

fcoalesce 选项
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   rs74315401

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。