2014-07-18 18 views
14

Tôi có một thư mục chứa 332 tệp csv. Tên của các tệp như sau: 001.csv, 002.csv, 003.csv, ............, 330.csv, 331.csv, 332.csv. Tất cả các tệp có cùng số lượng biến và cùng một định dạng.Đọc nhiều tệp csv từ một thư mục vào một khung dữ liệu duy nhất trong R

Tôi cần đọc tất cả các tệp trong một khung dữ liệu. Tôi đã từng đọc từng cuốn sách và sau đó sử dụng rbind, nhưng điều này quá cồng kềnh.

Cần trợ giúp.

+1

Mặc dù bản sao sẽ cung cấp cho bạn ý tưởng hay về những việc cần làm, vấn đề chính xác này đã được đăng trước đó trong các câu hỏi khác [như thế này] (http://stackoverflow.com/questions/23951541/importing- multiple-csv-file-into-r-by-tên-of-file/23952165 # 23952165). – Jaap

Trả lời

27

Hãy thử lapply và do.call

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

your_data_frame <- do.call(rbind,lapply(file_names,read.csv)) 
0

Đây là một giải pháp khả thi. Có lẽ cũng có thể được thực hiện với một hàm áp dụng.

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

Cảm ơn tất cả vì sự giúp đỡ ngay lập tức của bạn. Các lệnh sau với tiêu đề = TRUE làm việc cho tôi. file_names <- dir() #where bạn có các tệp của mình your_data_frame <- do.call (rbind, lapply (file_names, read.csv, header = TRUE)) – Madhumita

9

Giải pháp với data.table, câu trả lời được lấy từ một bài đăng khác trong SO mà tôi đã sử dụng khi quay lại.

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

Điều này khá hay. – AidanGawronski

Các vấn đề liên quan