2016-08-25 2 views
1

Ich bin sehr neu zu R, immer noch meinen Kopf herum, so meine Frage kann sehr einfach sein, aber bitte helfen Sie mir aus! Ich habe einen großen Datenrahmen mit mehr als 400000 Reihen.Wie kann ich eine Liste aus bestehenden Datenrahmen erstellen, jedes Objekt in einer Liste enthält einen Vektor aus einer einzelnen oder mehreren Zeilen aus dem Datenrahmen?

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 

Zuerst wollte ich einfach die GENE_ID als Zeilen Namen nennen, aber aufgrund einiger Gen-IDs nicht eindeutig zuzuordnen, scheiterte ich. Jetzt denke ich daran, diesen Datenrahmen zu einer Liste zu machen, in der jedes Objekt den Expressionslevel eines Gens enthält. Also, was ich will, ist eine Liste, das Ergebnis hat etwas ähnliches,

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 

Jede Beratung, dies zu erreichen würde sehr geschätzt werden.

+0

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

Antwort

1

Wir können eine melt von 'GENE_ID' tun und dann die split eine list von 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 

auch zu bekommen, können wir dies tun in base R

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

Es funktioniert wunderbar! Danke, danke. – dspgs

Verwandte Themen