Search code examples
rcsvrbindread.csvdo.call

Merge multiple .csv files into one


I am aware this question has been asked multiple times, but despite of trying to apply the aforementioned solutions i was not able to solve my little problem:

I have saved all my .csv that i am aiming to merge into one folder:

> file_list <- list.files()
> file_list[]
[1] "SR-einfam.csv"           "SR-garage.csv"           "SR-hotel.csv"           
[4] "SR-IndustrieGewerbe.csv" "SR-mehrfam.csv"          "SR-OffG.csv"  

the I use a do.call tio merge them all. Note that all the files have the same format.

sr.master <- do.call("rbind", lapply(file_list, read.csv,  sep = ";", header = TRUE)) 
names(sr.master)
str(sr.master)

however after inspecting my resulting file I have realized that only the first file has been imported. What causes this problem?

> str(sr.master)
'data.frame':   1941 obs. of  8 variables:
 $ Berechnung: Factor w/ 51 levels "Berechnung 1",..: 51 1 12 23 34 45 47 48 49 50 ...
 $ Situation : Factor w/ 13 levels "Nach Massnahme 0",..: 6 6 6 6 6 6 6 6 6 6 ...
 $ Sachrisiko: num  1857 1857 1857 1337 1342 ...
 $ PID       : int  2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 ...
 $ Case      : int  1 1 1 1 1 1 1 1 1 1 ...
 $ Differenz : num  0 0 0 -28 -27.7 ...
 $ Prozess   : Factor w/ 1 level "Murgang": 1 1 1 1 1 1 1 1 1 1 ...
 $ Objektart : Factor w/ 1 level "Einfamilienhaus": 1 1 1 1 1 1 1 1 1 1 ...

Solution

  • # Get file list
      file_list <- list.files()
    
    # Read all csv files in the folder and create a list of dataframes
      ldf <- lapply(file_list , read.csv)
    
    # Combine each dataframe in the list into a single dataframe
      df.final <- do.call("rbind", ldf)