2013-02-25 8 views
5

Ho letto in un elenco di set di dati e chiamato questo n. Quello che desidero fare è prendere un sottoinsieme dei set di dati da n e riga unirli insieme in R. Quando provo a passare a rbind(n) questo mi dà solo il frame di dati di tutti i nomi dei set di dati invece di mettere effettivamente gli elementi di ciascun set di dati sotto l'altro. Quello che voglio fare è legare sottoinsiemi di set di dati che condividono un nome comune. Ad esempio, 18 dei set di dati iniziano con "4." e voglio legare tutti questi insieme. C'è un modo semplice per farlo?Riga che associa un set di set di dati?

risposta

11

Vuoi che tu voglia fare è rbind(n[[1]],n[[2]],...) che non è lo stesso di rbind(n).

Non è necessario scrivere questo fuori, è possibile utilizzare do.call per creare ed eseguire questa call

do.call(rbind, n) 

che verrà eseguito il comando desiderato. Tuttavia, questo è notoriously slow

È possibile utilizzare rbindlist dal pacchetto data.table a fare la stessa cosa molto più veloce

library(data.table) 

rbindlist(n) 

Se desideri solo quegli elementi iniziare il cui nome con 4

rbindlist(n[grep(names(n), pattern = '^4')]) 
+0

Impressionante grazie che fa esattamente quello che voglio! Ora, come posso farlo per un sottoinsieme, ad esempio file contenenti "4." da qualche parte nel loro nome all'interno di n senza dover effettivamente andare a cercare in quali numeri della lista appartengono quei file? – user1836894

+0

@ user1836894 Questi sono i nomi degli elementi della lista? – mnel

+0

Sì, lo sono. Ho una lista di file e quelli sono i nomi appartenenti a un sottoinsieme dei file. – user1836894

1

Se si tenta di aggregare molti file, Potrebbe essere necessario la funzione rbind.fill nel pacchetto plyr (non so se esiste un equivalente data.table)

ll <- list(a=data.frame(x=1,y=2,z=1), 
     b= data.frame(x=2,y=3), 
     c=data.frame(x=3:4,y=5)) 

library(plyr) 
Reduce(rbind.fill,ll[c('a','b')]) ## subset by list names and 
            ## apply recursively using Reduce 
    x y z 
1 1 2 1 
2 2 3 NA 
+0

Non so di un equivalente rbind.fill, ma ho implementato qualcosa http://stackoverflow.com/a/15017231/1385941 – mnel