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