How to import multiple .csv files at once?

r, r-faq

Solution

Something like the following should result in each data frame as a separate element in a single list:

temp = list.files(pattern="\\.csv$")
myfiles = lapply(temp, read.delim)

This assumes that you have those CSVs in a single directory--your current working directory--and that all of them have the lower-case extension `.csv`.

If you then want to combine those data frames into a single data frame, see the solutions in other answers using things like `do.call(rbind,...)`, `dplyr::bind_rows()` or `data.table::rbindlist()`.

If you really want each data frame in a separate object, even though that's often inadvisable, you could do the following with `assign`:

temp = list.files(pattern="\\.csv$")
for (i in 1:length(temp)) assign(temp[i], read.csv(temp[i]))

Or, without `assign`, and to demonstrate (1) how the file name can be cleaned up and (2) show how to use `list2env`, you can try the following:

temp = list.files(pattern="\\.csv$")
list2env(
  lapply(setNames(temp, make.names(gsub("\\.csv$", "", temp))), 
         read.csv), envir = .GlobalEnv)

But again, it's often better to leave them in a single list.

Problem

Suppose we have a folder containing multiple data.csv files, each containing the same number of variables but each from different times. Is there a way in R to import them all simultaneously rather than having to import them all individually? My problem is that I have around 2000 data files to import and having to import them individually just by using the code: ``` read.delim(file="filename", header=TRUE, sep="\t") ``` is not very efficient.

Original source

Related problems