根据多个列折叠data.table

时间:2016-09-14 16:23:47

标签: r data.table bioinformatics

我有一个非常大的data.table有4列,其中只有一列是完全唯一的。很难解释,但它看起来像这样:

          ENSEMBL ENTREZID SYMBOL   ALIAS
1 ENSG00000000003     7105 TSPAN6    T245
2 ENSG00000000003     7105 TSPAN6  TM4SF6
3 ENSG00000000003     7105 TSPAN6 TSPAN-6
4 ENSG00000000003     7105 TSPAN6  TSPAN6
5 ENSG00000000005    64102   TNMD  BRICD4
6 ENSG00000000005    64102   TNMD   CHM1L

我正在尝试根据前3列折叠它,并使ALIAS列成为已折叠值的列表。

我知道我可以做results <- setDT(df)[, list(ALIAS=paste(ALIAS, collapse = '|')) , ENSEMBL],但后来我失去了两个中间位置。

2 个答案:

答案 0 :(得分:1)

你很亲密。尝试

DT[, paste0(ALIAS, collapse="|"), by=c("ENSEMBL", "ENTREZID", "SYMBOL")]

根据您提供的数据,这给了我

           ENSEMBL ENTREZID SYMBOL                         V1
1: ENSG00000000003     7105 TSPAN6 T245|TM4SF6|TSPAN-6|TSPAN6
2: ENSG00000000005    64102   TNMD               BRICD4|CHM1L

答案 1 :(得分:0)

在这种情况下,请将您要保留的所有列添加到by部分。

results <- setDT(df)[, 
                     list(ALIAS=paste(ALIAS, collapse = '|')), 
                     list(ENSEMBL, ENTREZID, SYMBOL)]