2013-02-19 12 views
15

È possibile inserire un gran numero di frame di dati in un elenco in un modo semplice? Significato invece di dover scrivere ogni nome manualmente come nel seguente modo:Inserire più frame di dati nell'elenco (modo intelligente)

list_of_df <- list(data_frame1,data_frame2,data_frame3, ....) 

ho tutti i frame di dati caricati nel mio spazio di lavoro. Ho intenzione di utilizzare l'elenco per eseguire il loop su tutti i frame di dati (per eseguire le stesse operazioni su ciascun frame di dati).

+0

@Imo e @EdChum; Questa domanda è stata pubblicata prima della domanda che hai contrassegnato come una pubblicazione di. Si prega di guardare le date! –

risposta

20

È possibile utilizzare ls() con get come segue:

l.df <- lapply(ls(), function(x) if (class(get(x)) == "data.frame") get(x)) 

questo sarà carico di tutto data.frames dal vostro luogo di lavoro ambiente attuale.

In alternativa, come suggerisce @agstudy, è possibile utilizzare il modello per caricare solo gli data.frame necessari.

l.df <- lapply(ls(pattern="df[0-9]+"), function(x) get(x)) 

Carica tutti data.frame s in ambiente corrente che inizia con df seguito da 1 a qualsiasi quantità di numeri.

+0

C'è un modo per mantenere intatti i nomi degli oggetti inclusi? Questo metodo funziona bene ma i nomi dei dataframe non sono quelli estratti. C'è un modo migliore di assegnarli separatamente? Grazie. – Anusha

+0

@Anusha, scusa, non capisco cosa intendi. Stai dicendo che vuoi una lista di data.frames con i nomi di ciascun elemento della lista che sono i nomi di quei data.frames? – Arun

+0

Sì. Gli oggetti sono stati identificati con il loro nome ma non vengono inclusi nell'elenco. Preferirei assegnare i nomi dei dataframes selezionati in questo stesso passo. – Anusha

6

È possibile utilizzare ls con un motivo specifico, ad esempio. Per esempio:

alcuni data.frames:

data.frame1 <- data.frame() 
data.frame2 <- data.frame() 
data.frame3 <- data.frame() 
data.frame4 <- data.frame() 

list(ls(pattern='data.fra*')) 
[[1]] 
[1] "data.frame1" "data.frame2" "data.frame3" "data.frame4" 
+4

Questo ti dà una lista di nomi, non il contenuto dell'oggetto. –

6

Di gran lunga la soluzione più semplice sarebbe quella di mettere il data.frame in un elenco in cui li si crea. Tuttavia, supponendo che si dispone di un elenco di caratteri dei nomi degli oggetti:

list_df = lapply(list_object_names, get) 

dove si poteva costruire si elenco come questo (esempio per 10 oggetti):

list_object_names = sprintf("data_frame%s", 1:10) 

o ottenere tutti gli oggetti nel vostro lavoro corrente in una lista:

list_df = lapply(ls(), get) 
names(list_df) = ls() 
Problemi correlati