Konvertieren von Daten-frame-Liste
Ich versuche, um zu gehen von einem Daten-frame eine Liste mit Struktur in R (und ich weiß technisch ein data frame ist eine Liste). Ich habe einen Daten-frame mit Referenz-Chemikalien und Ihre Mechanismen unterschiedliche Ziele. Zum Beispiel, östrogen ist ein östrogen-rezeptor-agonist. Was ich möchte ist, zum transformieren der Daten-frame an eine Liste, weil ich bin müde von der Eingabe etwas ähnliches wie:
refchem$chemical_id[refchem$target=="AR" & refchem$mechanism=="Agonist"]
jedes mal, wenn ich brauche, um auf die Liste der spezifischen Referenz-Chemikalien. Ich würde viel lieber den Zugriff auf die Chemikalien von:
refchem$AR$Agonist
Ich bin auf der Suche nach einer Allgemeinen Antwort, obwohl ich habe ein Vereinfachtes Beispiel, weil nicht alle Ziele sind alle Mechanismen.
Dies ist wirklich einfach zu bewerkstelligen mit einer Schleife:
example <- data.frame(target=rep(c("t1","t2","t3"),each=20),
mechan=rep(c("m1","m2"),each=10,3),
chems=paste0("chem",1:60))
oneoption <- list()
for(target in unique(example$target)){
oneoption[[target]] <- list()
for(mech in unique(example$mechan)){
oneoption[[target]][[mech]] <- as.character(example$chems[ example$target==target & example$mechan==mech ])
}
}
Ich Frage mich nur, wenn es ein cleverer Weg, es zu tun. Ich habe versucht, um das Spiel mit lapply
und machte keine Fortschritte.
InformationsquelleAutor dayne | 2013-09-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit
split
:Sollte den trick tun.
Der neue Weg, um Zugang wäre
refchem$AR.Agonist
drop
argument?Da
drop
ist logisch, können Sie nur setzendrop=TRUE
undR
sollte es für Sie tun.InformationsquelleAutor Señor O
Wenn Sie machen einen kodierten Daten.Tabelle statt, ...
Zugriff auf eine Teilmenge:
Etwas zu tun, für jede Gruppe, wird
rbind
ed zusammen in der Folge:Ähnlich
aggregate()
ist eine Liste von Vektoren, die die richtige Länge haben, können in derby
, nicht nur für den Schlüssel.Schließlich
DT
kamen...Ich Tat dies für eine lange Zeit zu lernen aber es war die beste Entscheidung die ich je gemacht habe mit R. ich hatte einmal die Funktion, dass war 150 Zeilen Code und dauerte 5 Minuten zu laufen, die läuft jetzt in 15 Sekunden und dauert bis 25 Linien.
InformationsquelleAutor Frank
Können Sie auch einen
plyr
Funktion:Es hat den zusätzlichen Vorteil der Verwendung einer Funktion, die Daten zu verarbeiten, wenn nötig (es gibt eine implizite
identity
im oben).InformationsquelleAutor mengeln