web-dev-qa-db-fra.com

Lecture de plusieurs fichiers csv d'un dossier dans une seule trame de données dans R

J'ai un dossier contenant 332 fichiers csv. Les noms des fichiers sont les suivants 001.csv, 002.csv, 003.csv, ............, 330.csv, 331.csv, 332.csv. Tous les fichiers ont le même nombre de variables et le même format.

J'ai besoin de lire tous les fichiers dans une même trame de données. J'ai lu chacun d'eux puis j'ai utilisé rbind, mais c'est trop lourd.

Besoin d'aide pour.

17
Madhumita

Essayez lapply et do.call

file_names <- dir() #where you have your files

your_data_frame <- do.call(rbind,lapply(file_names,read.csv))
35
Mario Fajardo

Solution avec data.table, la réponse est tirée d'un autre article de SO que j'ai parfois utilisé en retour.

library(data.table)  
files <- list.files(path = "/etc/dump",pattern = ".csv")
temp <- lapply(files, fread, sep=",")
data <- rbindlist( temp )

Voici une solution possible. Pourrait probablement aussi être fait avec une fonction d'application.

path <- "path_to_files"
files <- c(paste("00",2:9,".csv",sep=""),
           paste("0",10:99,".csv",sep=""), 
           paste(100:332,".csv",sep="")
           )
#Read first file to create variables in a data frame
data <- read.csv(paste(path,"001.csv",sep="/"))

#Read remaining files and rbind them to dataset
for (f in files) {
   data <- rbind(data,read.csv(paste(path, files, sep="/")))
}
0
MBDK