2016-08-25 53 views
1

我对R非常陌生,依然让我头脑发热,所以我的问题可以很基本,但请帮助我! 我有一个大型的数据框,有超过400000行。如何从现有数据框中创建列表,列表中的每个对象是否包含数据框中单个或多个行的矢量?

GENE_ID p1 p2 p3 ... 
41   1 2 3 
41   4 5 6 
41   7 8 9 
85   1 2 3 
1923  1 2 3 
1923  4 5 6 

首先,我想简单地将GENE_ID命名为行名,但由于某些基因ID不唯一,我失败了。 现在我正在考虑将这个数据框放入一个列表中,每个对象都包含一个基因的表达水平。 所以,我想是有结果的话就像一个列表,

mylist$41 
[1] 1 2 3 4 5 6 7 8 9 

mylist$85 
[1] 1 2 3 

mylist$1923 
[1] 1 2 3 4 5 6 

任何意见,实现这一目标将不胜感激。

+0

' split(unlist(df [-1],use.names = FALSE),df [1])' – alistaire

回答

1

我们可以做一个melt通过 'GENE_ID',然后做split获得listvector小号

library(reshape2) 
mylist <- melt(df1, id.var = 'GENE_ID') 
split(mylist$value, mylist$GENE_ID) 
#$`41` 
#[1] 1 4 7 2 5 8 3 6 9 

#$`85` 
#[1] 1 2 3 

#$`1923` 
#[1] 1 4 2 5 3 6 

而且,我们可以做到这一点base R

v1 <- unlist(df1[-1], use.names = FALSE) 
grp <- rep(df1[,1], ncol(df1[-1])) 
split(v1, grp) 
+1

它奇妙地工作!谢谢akrun。 – dspgs

相关问题