Je fais une analyse relativement simple que j'ai mise dans une fonction, sur tous les fichiers d'un dossier particulier. Je me demandais si quelqu'un avait des conseils pour m'aider à automatiser le processus sur un certain nombre de dossiers différents.
- Tout d'abord, je me demandais s'il y avait un moyen de lire tous les fichiers d'un dossier particulier directement dans R. Je pense que la commande suivante listera tous les fichiers:
files <- (Sys.glob("*.csv"))
... que j'ai trouvé en utilisant R pour lister tous les fichiers avec une extension spécifiée
Et puis le code suivant lit tous ces fichiers dans R.
listOfFiles <- lapply(files, function(x) read.table(x, header = FALSE))
… De Manipulation de plusieurs fichiers dans R
Mais les fichiers semblent être lus comme une liste continue et non comme des fichiers individuels… comment puis-je changer le script pour ouvrir tous les fichiers csv dans un dossier particulier en tant que dataframes individuels?
Deuxièmement, en supposant que je puisse lire tous les fichiers séparément, comment puis-je compléter une fonction sur toutes ces dataframes en une seule fois. Par exemple, j'ai créé quatre petits dataframes pour illustrer ce que je veux:
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)))
J'ai également créé un exemple de fonction:
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)}
J'utiliserais habituellement la commande suivante pour appliquer la fonction à chaque trame de données individuelle.
Df1.summary <-Summary (dfile)
Existe-t-il un moyen au lieu d'appliquer la fonction à toutes les dataframes, et d'utiliser les titres des dataframes dans les tableaux récapitulatifs (ie Df1.summary).
Merci beaucoup,
Katie
plyr::llply
(ouldply
) au lieu delapply
conserver les noms partout, et définir ma propre fonction de résumé, par exempleplyr::each(min, max, mean, sd, median)
plyr
suggestion.summary
par n'importe quelle fonction de la vôtre, à condition qu'elle prenne un data.frame comme argument (et / ou des paramètres optionnels qui sont constants sur les DF de différence). Par exemple,lapply(ldf, function(x) apply(x, 2, function(x) c(mean(x), sd(x))))
renvoie la moyenne et l'écart-type calculé par colwise.généralement, je n'utilise pas la boucle for dans R, mais voici ma solution en utilisant des boucles for et deux packages: plyr et dostats
plyr est sur cran et vous pouvez télécharger des dostats sur https://github.com/halpo/dostats (peut-être en utilisant install_github du package Hadley devtools )
En supposant que j'ai vos deux premiers data.frame (Df.1 et Df.2) dans des fichiers csv, vous pouvez faire quelque chose comme ça.
Voici la sortie
la source
plyr
solution est plutôt sympa!Voici une
tidyverse
option qui n'est peut-être pas la plus élégante, mais qui offre une certaine flexibilité en ce qui concerne ce qui est inclus dans le résumé:la source