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)
plyr
sugestão.summary
por qualquer função sua, desde que receba um data.frame como um argumento (e / ou parâmetros opcionais que são constantes nas diferenças de DFs). Por exemplo,lapply(ldf, function(x) apply(x, 2, function(x) c(mean(x), sd(x))))
retornaria a média e o SD calculado simultaneamente.normalmente eu não uso for loop em R, mas aqui está minha solução usando for loops e dois pacotes: plyr e dostats
plyr está no cran e você pode baixar dostats em https://github.com/halpo/dostats (pode estar usando install_github do Hadley devtools pacote )
Supondo que eu tenha seus dois primeiros data.frame (Df.1 e Df.2) em arquivos csv, você pode fazer algo assim.
Aqui está o resultado
fonte
plyr
solução é bastante boa!Aqui está uma
tidyverse
opção que pode não ser a mais elegante, mas oferece alguma flexibilidade em termos do que está incluído no resumo:fonte