calculer la moyenne des colonnes de plusieurs fichiers
Bonjour,
Je vous conseille de procéder pas à pas :
Soit deux dataframes correspondant au contenu de deux fichiers :
Code:
1 2
| df1 <- data.frame(V1 = c(1,1,1), V2 = c(2,2,2), V3 = c(3,3,3))
df2 <- data.frame(V1 = c(4,4,4), V3 = c(5,5,5), V4 = c(6,6,6)) |
Voyons ce que donne la fonction colMeans() et surtout la structure du résultat :
Code:
1 2 3
| > str(colMeans(df1))
Named num [1:3] 1 2 3
- attr(*, "names")= chr [1:3] "V1" "V2" "V3" |
Si vous souhaitez ranger l'ensemble des résultats dans un tableau, il vaut mieux obtenir un dataframe :
Code:
1 2 3 4 5
| > str(data.frame(lapply(df1,mean)))
'data.frame': 1 obs. of 3 variables:
$ V1: num 1
$ V2: num 2
$ V3: num 3 |
Ensuite on peut utiliser la fonction rbind.fill() du package plyr pour concaténer les différents dataframes obtenus :
Code:
1 2 3 4 5 6 7 8
| > mean1 <- data.frame(lapply(df1,mean))
> mean2 <- data.frame(lapply(df2,mean))
>
> library(plyr)
> rbind.fill(mean1, mean2)
V1 V2 V3 V4
1 1 2 3 NA
2 4 NA 5 6 |
On peut alors généraliser le programme :
Code:
1 2 3 4 5 6 7 8 9 10 11
| setwd("D:/data")
liste_fichiers <- list.files(pattern="csv")
n=length(liste_fichiers)
dftot=data.frame()
for (i in 1:n)
{
df <- read.csv(liste_fichiers[i])
mean_fichier <- data.frame(lapply(df,mean))
dftot <- rbind.fill(dftot, mean_fichier)
}
dftot |
Ou avec les fonctions de liste de R :
Code:
1 2
| rbind.fill(lapply(list.files(pattern="csv"),
function(x) data.frame(lapply(read.csv(x),mean)))) |
Cordialement,
calculer la moyenne des colonnes de plusieurs fichiers
Bonjour fanfanus,
Oui, tout à fait :
Code:
mean_fichier <- data.frame(fichier=liste_fichiers[i],lapply(df,mean))
Cordialement,