基于公共行合并两个大型表

Mol*_*ist 4 r

我有两个包含遗传SNP数据的大型数据表(或将有它们,我仍然需要将它们变成相同的格式).

这些是非常庞大的表格,因此我必须在集群上执行任何操作.

两个表都有> 600,000行,其中包含不同但重叠的SNP的数据.每列是一个人(一个表有942个样本,一个有92个).一旦正确格式化了另一个表,两个表都将如下所示

dbSNP_RSID  Sample1 Sample2 Sample3 Sample4 Sample5
rs10000011  CC  CC  CC  CC  TC
rs1000002   TC  TT  CC  TT  TT
rs10000023  TG  TG  TT  TG  TG
rs1000003   AA  AG  AG  AA  AA
rs10000041  TT  TG  TT  TT  TG
rs10000046  GG  GG  AG  GG  GG
rs10000057  AA  AG  GG  AA  AA
rs10000073  TC  TT  TT  TT  TT
rs10000092  TC  TC  CC  TC  TT
rs1000014   GG  GG  GG  GG  GG
rs10000154  GG  AG  AG  AA  AG
rs10000159  GG  AG  GG  GG  AG
rs1000016   AA  AG  AA  AG  GG
rs10000182  AA  AA  AG  AA  AA
rs1000020   TC  TC  TT  TT  TC
Run Code Online (Sandbox Code Playgroud)

我想创建一个大于1000列的大表,并且它具有两个表中表示的~600,000行的交集.R似乎是一种很好用的语言.有人对如何做到这一点有任何建议吗?谢谢!

Chr*_*ris 5

使用data.table,DT1第一个表在哪里,DT2是第二个:

library(data.table)
setkey(DT1,"id")
setkey(DT2,"id")
DT <- merge(DT1,DT2,by = "id")
Run Code Online (Sandbox Code Playgroud)


Nic*_*edy 5

您可以使用merge,例如:

mergedTable <- merge(table1, table2, by = "dbSNP_RSID")
Run Code Online (Sandbox Code Playgroud)

如果样本的列名称重叠,那么您会发现mergedTable具有(例如)名为Sample1.x和Sample1.y的列。可以通过在合并之前或之后重命名列来解决此问题。

可重现的示例:

x <- data.frame(dbSNP_RSID = paste0("rs", sample(1e6, 1e5)),
  matrix(paste0(sample(c("A", "C", "T", "G"), 1e7, replace = TRUE),
    sample(c("A", "C", "T", "G"), 1e7, replace = TRUE)), ncol = 100))
y <- data.frame(dbSNP_RSID = paste0("rs", sample(1e6, 1e5)),
  matrix(paste0(sample(c("A", "C", "T", "G"), 1e7, replace = TRUE),
    sample(c("A", "C", "T", "G"), 1e7, replace = TRUE)), ncol = 100))
colnames(x)[2:101] <- paste0("Sample", 1:100)
colnames(y)[2:101] <- paste0("Sample", 101:200)
mergedDf <- merge(x, y, by = "dbSNP_RSID")
Run Code Online (Sandbox Code Playgroud)