2016-09-14 43 views
1

我有一个非常大的data.table与4列,其中只有一个是完全独特的。很难解释,但它看起来像这样:基于几列折叠data.table

  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],但后来我失去了中间两个cols。

+1

如果SYMBOL和ENTREZID是相同的每个ENSEMBL,使用也作为分组变量,即'setDT(DF), 。(ALIAS = paste(ALIAS,collapse =“|”)),c(names(df)[1:3])]' – akrun

回答

1

You are close。尝试

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 
+0

在发布后的秒数 – Ethan

0

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

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