Sto eseguendo un'analisi relativamente semplice che ho inserito in una funzione, su tutti i file in una determinata cartella. Mi chiedevo se qualcuno avesse qualche suggerimento per aiutarmi ad automatizzare il processo su una serie di cartelle diverse.
- In primo luogo, mi chiedevo se ci fosse un modo per leggere tutti i file in una particolare cartella direttamente in R. Credo che il seguente comando elencherà tutti i file:
files <- (Sys.glob("*.csv"))
... che ho trovato utilizzando R per elencare tutti i file con un'estensione specificata
E poi il codice seguente legge tutti quei file in R.
listOfFiles <- lapply(files, function(x) read.table(x, header = FALSE))
... dalla manipolazione di più file in R
Ma i file sembrano essere letti come un elenco continuo e non come singoli file ... come posso modificare lo script per aprire tutti i file CSV in una determinata cartella come singoli dataframe?
In secondo luogo, supponendo che io possa leggere tutti i file separatamente, come posso completare una funzione su tutti questi dataframe in una volta. Ad esempio, ho creato quattro piccoli dataframe in modo da poter illustrare quello che voglio:
Df.1 <- data.frame(A = c(5,4,7,6,8,4),B = (c(1,5,2,4,9,1))) Df.2 <- data.frame(A = c(1:6),B = (c(2,3,4,5,1,1))) Df.3 <- data.frame(A = c(4,6,8,0,1,11),B = (c(7,6,5,9,1,15))) Df.4 <- data.frame(A = c(4,2,6,8,1,0),B = (c(3,1,9,11,2,16)))
Ho anche creato una funzione di esempio:
Summary<-function(dfile){
SumA<-sum(dfile$A)
MinA<-min(dfile$A)
MeanA<-mean(dfile$A)
MedianA<-median(dfile$A)
MaxA<-max(dfile$A)
sumB<-sum(dfile$B)
MinB<-min(dfile$B)
MeanB<-mean(dfile$B)
MedianB<-median(dfile$B)
MaxB<-max(dfile$B)
Sum<-c(sumA,sumB)
Min<-c(MinA,MinB)
Mean<-c(MeanA,MeanB)
Median<-c(MedianA,MedianB)
Max<-c(MaxA,MaxB)
rm(sumA,sumB,MinA,MinB,MeanA,MeanB,MedianA,MedianB,MaxA,MaxB)
Label<-c("A","B")
dfile_summary<-data.frame(Label,Sum,Min,Mean,Median,Max)
return(dfile_summary)}
Di solito userei il seguente comando per applicare la funzione a ogni singolo dataframe.
Df1.summary <-Summary (dfile)
Esiste un modo invece di applicare la funzione a tutti i dataframe e utilizzare i titoli dei dataframe nelle tabelle di riepilogo (es. Df1.summary).
Grazie molto,
Katie
plyr::llply
(oldply
) invece dilapply
preservare i nomi in tutto e definire la mia funzione di riepilogo, ad esempioplyr::each(min, max, mean, sd, median)