Estou fazendo uma análise relativamente simples que coloquei em uma função, em todos os arquivos em uma pasta específica. Eu queria saber se alguém tem alguma dica para me ajudar a automatizar o processo em várias pastas diferentes.
- Em primeiro lugar, gostaria de saber se existe uma maneira de ler todos os arquivos em uma pasta específica diretamente para R. Acredito que o seguinte comando listará todos os arquivos:
files <- (Sys.glob("*.csv"))
... que encontrei em Using R para listar todos os arquivos com uma extensão especificada
E então o código a seguir lê todos esses arquivos em R.
listOfFiles <- lapply(files, function(x) read.table(x, header = FALSE))
… De manipular vários arquivos em R
Mas os arquivos parecem ser lidos como uma lista contínua e não como arquivos individuais ... como posso alterar o script para abrir todos os arquivos csv em uma pasta específica como dataframes individuais?
Em segundo lugar, supondo que eu possa ler todos os arquivos separadamente, como faço para completar uma função em todos esses dataframes de uma vez. Por exemplo, criei quatro pequenos dataframes para ilustrar o que desejo:
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)))
Também criei uma função de exemplo:
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)}
Normalmente, eu usaria o seguinte comando para aplicar a função a cada dataframe individual.
Df1.summary <-Summary (dfile)
Existe uma maneira em vez de aplicar a função a todos os dataframes, e usar os títulos dos dataframes nas tabelas de resumo (ou seja, Df1.summary).
Muito Obrigado,
Katie
plyr::llply
(ouldply
) em vez delapply
preservar os nomes por completo e definir minha própria função de resumo, por exemploplyr::each(min, max, mean, sd, median)