Fusion de multiples fichiers

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Montana ROQUILLET
Messages : 43
Enregistré le : 24 Juil 2017, 06:39

Fusion de multiples fichiers

Messagepar Montana ROQUILLET » 31 Juil 2019, 12:47

Bonjour,

J'ai une centaine de fichiers, avec les mêmes colonnes, que je voudrais fusionner. Pour cela, je les ai tous mis dans un même dossier, et j'ai fait une boucle pour tous les ouvrir dans R, en créant une liste. J'aimerai maintenant faire une boucle pour tous les fusionner et obtenir un unique fichier.

Merci de votre aide,

Montana ROQUILLET

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: Fusion de multiples fichiers

Messagepar Eric Casellas » 31 Juil 2019, 13:54

Bonjour,

Pour répondre à ta question :
Montana ROQUILLET a écrit :en créant une liste. J'aimerai maintenant faire une boucle pour tous les fusionner

, un exemple d'une façon de faire :

Code : Tout sélectionner

df_list=list(data.frame(a=rnorm(10), b=rnorm(10)), data.frame(a=rnorm(5), b=rnorm(5)), data.frame(a=rnorm(20), b=rnorm(20)))
do.call("rbind", df_list)


Sinon si ton but est "simplement" de fusionner des fichiers texte, il n'est pas utile d'utiliser R, il existe des outils en ligne de commande (en fonction de ton OS, les outils ne sont pas les même) qui feront ça plus rapidement (par exemple voir https://stackoverflow.com/questions/30466408/windows-batch-concatenate-multiple-text-files-into-one)

Eric
Eric

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Fusion de multiples fichiers

Messagepar Mickael Canouil » 01 Aoû 2019, 08:04

Bonjour,

Voici une proposition pour lire une liste de fichier et les combiner

Code : Tout sélectionner

list_files <- lapply(list.files(path = "./", pattern = "*.csv"), read.csv)
dta <- do.call("rbind", all_files)


Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Montana ROQUILLET
Messages : 43
Enregistré le : 24 Juil 2017, 06:39

Re: Fusion de multiples fichiers

Messagepar Montana ROQUILLET » 01 Aoû 2019, 08:16

Bonjour,

Merci pour votre retour.
Je suis sous Windows, j'aime mieux fusionner mes fichiers directement sous R parce qu'ils contiennent beaucoup d'observations et je ne pourrais pas ouvrir le fichier final, trop volumineux, sous Excel.
J'ai essayé votre code, et j'obtiens seulement une fusion de la liste de fichiers que j'ai créé, j'ai peut être mal compris comment l'utiliser.
Pour plus de précisions, voici mon code pour créer la liste de ces fichiers et tous les ouvrir d'un coup dans R:

files_names <- list.files("U:/chemin/dossier/")
nb_files <- length(files_names)
data_names <- vector("list", length=nb_files)

for(i in 1:nb_files){
data_names[i] <- strsplit(files_names[i], split=".csv")
}

for(i in 1:nb_files){
assign(data_names[[i]],
read.csv2(paste("U:/chemin/dossier/",files_names[i],sep="")))
}


Merci pour votre aide,

Montana ROQUILLET

Montana ROQUILLET
Messages : 43
Enregistré le : 24 Juil 2017, 06:39

Re: Fusion de multiples fichiers

Messagepar Montana ROQUILLET » 01 Aoû 2019, 08:20

Merci Mickael, je vais essayer ça !

Montana ROQUILLET
Messages : 43
Enregistré le : 24 Juil 2017, 06:39

Re: Fusion de multiples fichiers

Messagepar Montana ROQUILLET » 01 Aoû 2019, 11:52

Mickael,

La première ligne ne fonctionne pas, il me renvoie qu'il ne trouve pas mon fichier. J'avais le même problème avec mon code, jusqu'à ce que je me rende compte qu'il mettait automatiquement un espace entre le chemin et le nom du fichier. J'ai donc ajouté un sep="", ce qui a résolu le problème, mais là il n'accepte pas mon option...
J'ai quand même essayé d'utiliser mon code et votre deuxième ligne, mais il me répond qu'il ne trouve pas l'objet "all_files"... à quoi ça correspond exactement ?

Merci de votre aide,

Montana ROQUILLET

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Fusion de multiples fichiers

Messagepar Mickael Canouil » 01 Aoû 2019, 13:33

Une erreur de frappe, il fallait comprendre (adapté en fonction du code que vous avez fourni)

Code : Tout sélectionner

list_files <- lapply(
  X = list.files(path = "U:/chemin/dossier", pattern = "*.csv", full.names = TRUE),
  FUN = read.csv2
)
dta <- do.call("rbind", list_files)



un (deux) exemple(x) reproductible(s)

Code : Tout sélectionner

# Create fake data and write them into files
options(stringsAsFactors = FALSE)
invisible(
  replicate(
    n = 5,
    expr = write.csv2(x = iris[sample(1:nrow(iris), 5), ], file = tempfile(fileext = ".csv"))
  )
)

Code : Tout sélectionner

# Read fake files and combine them with R base
list_files <- lapply(
  X = list.files(path = tempdir(), pattern = ".csv", full.names = TRUE),
  FUN = read.csv2
)
do.call("rbind", list_files)
#>      X Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
#> 1  135          6.1         2.6          5.6         1.4  virginica
#> 2  142          6.9         3.1          5.1         2.3  virginica
#> 3  144          6.8         3.2          5.9         2.3  virginica
#> 4   40          5.1         3.4          1.5         0.2     setosa
#> 5   66          6.7         3.1          4.4         1.4 versicolor
#> 6   65          5.6         2.9          3.6         1.3 versicolor
#> 7  122          5.6         2.8          4.9         2.0  virginica
#> 8    5          5.0         3.6          1.4         0.2     setosa
#> 9  112          6.4         2.7          5.3         1.9  virginica
#> 10  70          5.6         2.5          3.9         1.1 versicolor
#> 11  67          5.6         3.0          4.5         1.5 versicolor
#> 12  47          5.1         3.8          1.6         0.2     setosa
#> 13  18          5.1         3.5          1.4         0.3     setosa
#> 14  41          5.0         3.5          1.3         0.3     setosa
#> 15  75          6.4         2.9          4.3         1.3 versicolor
#> 16  38          4.9         3.6          1.4         0.1     setosa
#> 17 135          6.1         2.6          5.6         1.4  virginica
#> 18  73          6.3         2.5          4.9         1.5 versicolor
#> 19   3          4.7         3.2          1.3         0.2     setosa
#> 20 119          7.7         2.6          6.9         2.3  virginica
#> 21  24          5.1         3.3          1.7         0.5     setosa
#> 22  68          5.8         2.7          4.1         1.0 versicolor
#> 23 141          6.7         3.1          5.6         2.4  virginica
#> 24  53          6.9         3.1          4.9         1.5 versicolor
#> 25  75          6.4         2.9          4.3         1.3 versicolor

Code : Tout sélectionner

# Read fake files and combine them with R purrr
purrr::map_df(
  .x = list.files(path = tempdir(), pattern = ".csv", full.names = TRUE),
  .f = read.csv2
)
#>      X Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
#> 1  135          6.1         2.6          5.6         1.4  virginica
#> 2  142          6.9         3.1          5.1         2.3  virginica
#> 3  144          6.8         3.2          5.9         2.3  virginica
#> 4   40          5.1         3.4          1.5         0.2     setosa
#> 5   66          6.7         3.1          4.4         1.4 versicolor
#> 6   65          5.6         2.9          3.6         1.3 versicolor
#> 7  122          5.6         2.8          4.9         2.0  virginica
#> 8    5          5.0         3.6          1.4         0.2     setosa
#> 9  112          6.4         2.7          5.3         1.9  virginica
#> 10  70          5.6         2.5          3.9         1.1 versicolor
#> 11  67          5.6         3.0          4.5         1.5 versicolor
#> 12  47          5.1         3.8          1.6         0.2     setosa
#> 13  18          5.1         3.5          1.4         0.3     setosa
#> 14  41          5.0         3.5          1.3         0.3     setosa
#> 15  75          6.4         2.9          4.3         1.3 versicolor
#> 16  38          4.9         3.6          1.4         0.1     setosa
#> 17 135          6.1         2.6          5.6         1.4  virginica
#> 18  73          6.3         2.5          4.9         1.5 versicolor
#> 19   3          4.7         3.2          1.3         0.2     setosa
#> 20 119          7.7         2.6          6.9         2.3  virginica
#> 21  24          5.1         3.3          1.7         0.5     setosa
#> 22  68          5.8         2.7          4.1         1.0 versicolor
#> 23 141          6.7         3.1          5.6         2.4  virginica
#> 24  53          6.9         3.1          4.9         1.5 versicolor
#> 25  75          6.4         2.9          4.3         1.3 versicolor
Mickaël
mickael.canouil.fr | rlille.fr

Montana ROQUILLET
Messages : 43
Enregistré le : 24 Juil 2017, 06:39

Re: Fusion de multiples fichiers

Messagepar Montana ROQUILLET » 02 Aoû 2019, 08:15

Bonjour,

Ça marche à merveille, un grand merci pour vos explications !

Montana ROQUILLET


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité