我有两个包含遗传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似乎是一种很好用的语言。有人对如何做到这一点有任何建议吗?谢谢!
答案 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")