我是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 :(得分: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)