2015-01-22 17 views
9

Sto tentando di ordinare un elenco di elenchi in R. Ogni sottolista contiene un numero intero e una stringa di caratteri. Il mio obiettivo è ordinare gli elenchi in modo tale che l'elenco finale sia ordinato per numeri interi in ordine crescente. Di seguito è riportato un esempio di quello che sto cercando di realizzare:Come ordinare una lista di liste 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" 

C'è un bel modo all'interno di R per ottenere questo risultato? Idealmente il risultato dovrebbe essere restituito come una lista di liste pure.

risposta

16

Prova questo:

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

Grazie per la risposta veloce e corretta! Ho provato ad accettarlo, ma sembra che devo aspettare qualche minuto! Mentre l'orologio ticchetta accettando questo è comunque possibile approfondire ciò che ogni parte sta facendo? Sono molto confuso dal tuo uso di sapply. Cosa significa '[[' specificare? Inoltre, qual è l'ultima argomentazione nella specificazione discreta? Sono nuovo di R ... – mjnichol

+2

@mjnichol - a lungo parte, si potrebbe scrivere: 'sapply (list.of.lists, funzione (x) x [[1]])' - si tratta solo di estrazione del primo elemento da ogni lista e poi restituendola come un vettore che viene poi passato a 'order'. Per esempio. - 'a [[1]]' e ''[[' (a, 1)' sono equivalenti. – thelatemail

+0

Ah, ho immaginato tanto. Grazie! – mjnichol

1

Hai un sacco di struttura in vostri list.of.lists. A seconda di altre lavorazioni che devi fare, si potrebbe desiderare di farne un elenco bidimensionale in questo modo:

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

e, possibilmente, da lì, in una cornice di dati come questo:

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

(Tecnicamente, un frame di dati è un tipo di elenco.) L'ordinamento per un particolare set di colonne e l'estrazione di sottoinsiemi di elementi possono quindi essere un po 'più convenzionali. (Anche se mi piace molto anche la risposta accettata qui.)

Problemi correlati