2017-06-02 186 views
0

我知道這個問題已經被問多次,但儘管嘗試應用上述解決方案,我沒能解決我的小問題:合併多個的.csv文件合併成一個

我救了我的所有。 CSV是我的目標合併成一個文件夾:

> 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" 

在我使用的是do.call蒂奧合併他們。請注意,所有文件都具有相同的格式。

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

然而,在檢查我的結果文件後,我意識到只有第一個文件已被導入。 導致此問題的原因是什麼?

> 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 ... 
+0

沒有一個工作示例,診斷相當困難。我建議你最初將'do.call(.. lapply ...)'分成兩個獨立的步驟。首先,像'myData < - lapply(...)'。現在看看結果列表。檢查數據集的名稱。確保它包含你認爲應該做的事,在列表的每個元素上執行'str'等 – lmo

+0

當你只運行'lapply(file_list,read.csv,sep =「;」,header = TRUE)時, ? – Jimbou

+0

@Jimbou,'sep =「,」'對於csv文件不是';' – parth

回答

0
# 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) 
1

這裏有一個簡單的方法(和probbly最快的國家之一)使用fread{data.table}

# Load library 
    library(data.table) 

# Get a List of all files named with a key word, say all `.csv` files 
    filenames <- list.files("C:/your/folder", pattern="*.csv", full.names=TRUE) 

# Load and bind all data sets 
    data <- rbindlist(lapply(filenames,fread)) 

而且在你想要的情況下綁定多個.csv文件幀到一個單一的數據幀將所有數據文件綁定到數據幀列表中,就像

# Load data sets 
    list.DFs <- lapply(filenames,fread)