Question
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.
Answer
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.