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

时间:2015-06-11 22:53:35

标签: 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

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

2 个答案:

答案 0 :(得分:5)

使用data.table,其中DT1是第一个表,DT2是第二个表:

library(data.table)
setkey(DT1,"id")
setkey(DT2,"id")
DT <- merge(DT1,DT2,by = "id")

答案 1 :(得分:5)

您可以使用merge,例如:

mergedTable <- merge(table1, table2, by = "dbSNP_RSID")

如果您的样本具有重叠的列名,那么您将发现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")