收起 data.table 基于几列
Collapse data.table based on several columns
我有一个非常大的 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]
,但我失去了中间的两个列。
在这种情况下,将要保留的所有列添加到 by
部分。
results <- setDT(df)[,
list(ALIAS=paste(ALIAS, collapse = '|')),
list(ENSEMBL, ENTREZID, SYMBOL)]
你很接近。尝试
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
我有一个非常大的 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]
,但我失去了中间的两个列。
在这种情况下,将要保留的所有列添加到 by
部分。
results <- setDT(df)[,
list(ALIAS=paste(ALIAS, collapse = '|')),
list(ENSEMBL, ENTREZID, SYMBOL)]
你很接近。尝试
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