2015-01-22 19 views
9

Ich versuche eine Liste von Listen in R zu sortieren. Jede Unterliste enthält eine ganze Zahl und eine Zeichenfolge. Mein Ziel ist es, die Listen so anzuordnen, dass die endgültige Liste nach Ganzzahlen in aufsteigender Reihenfolge sortiert wird. Unten ist ein Beispiel dafür, was ich zu erreichen versuchen:Wie sortiere ich eine Liste von Listen in R?

a <- list(-5,"help") 
b <- list(3, "stack") 
c <- list(1, "me") 
d <- list(10, "overflow") 

list.of.lists <- list(a,b,c,d) 
magic.sort(list.of.lists) 
# Below is not exactly how it would be displayed, but should be understandable 
-5, "help" 
1, "me" 
3, "stack" 
10, "overflow" 

Gibt es innerhalb R ein schöner Weg, um dieses Ergebnis zu erreichen? Im Idealfall sollte das Ergebnis auch als Liste von Listen zurückgegeben werden.

Antwort

16

Versuchen Sie folgendes:

list.of.lists[order(sapply(list.of.lists,'[[',1))] 
+0

Danke für die schnelle und korrekte Antwort! Ich habe versucht, es zu akzeptieren, aber es scheint, dass ich ein paar Minuten warten muss! Während die Uhr darauf tickt, dass das akzeptiert wird, könntest du näher erläutern, was jeder Teil tut. Ich bin am meisten verwirrt durch Ihre Verwendung von Sapply. Was bedeutet das '['? Was ist das letzte Argument in Sapply? Ich bin neu in R ... – mjnichol

+2

@mjnichol - in der langen Hand könnte man schreiben: 'sapply (liste.von.listen, funktion (x) x [[1]])' - es extrahiert nur das erste element jede Liste und dann das als einen Vektor zurückgeben, der dann an 'Auftrag' übergeben wird. Z.B. - 'a [[1]]' und '[['(a, 1)' sind gleichwertig. – thelatemail

+0

Ah, ich habe so viel gedacht. Vielen Dank! – mjnichol

1

Sie in Ihrem list.of.lists viel Struktur. In Abhängigkeit von anderen Verarbeitungs was Sie tun müssen, möchten Sie vielleicht in eine zweidimensionale Liste machen, wie so:

list.2d <- sapply(list.of.lists, cbind) 

und möglicherweise von dort in einen Datenrahmen wie folgt aus:

df <- data.frame(t(list.2d)) 

(Technisch gesehen ist ein Datenrahmen eine Art von Liste.) Das Sortieren nach einer bestimmten Gruppe von Spalten und das Extrahieren von Teilmengen von Elementen kann dann etwas konventioneller sein. (Obwohl ich auch die angenommene Antwort hier wirklich mag.)

Verwandte Themen