如何从现有数据框创建列表,列表中的每个对象都包含数据帧中单行或多行的向量?

时间:2016-08-25 02:41:13

标签: r

我是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

非常感谢任何有关实现这一目标的建议。

1 个答案:

答案 0 :(得分:1)

我们可以通过' GENE_ID'进行melt然后执行split获取list vector s

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)