2013-04-11 33 views
11

Có cách nào để tăng tốc quá trình sau trong R?Cách nhanh hơn để đọc nhiều csv vào một khung dữ liệu?

theFiles <- list.files(path="./lca_rs75_summary_logs", full.names=TRUE, pattern="*.summarylog") 

listOfDataFrames <- NULL 
masterDataFrame <- NULL 

for (i in 1:length(theFiles)) { 
    tempDataFrame <- read.csv(theFiles[i], sep="\t", header=TRUE) 
    #Dropping some unnecessary row 
    toBeRemoved <- which(tempDataFrame$Name == "") 
    tempDataFrame <- tempDataFrame[-toBeRemoved,] 
    #Now stack the data frame on the master data frame 
    masterDataFrame <- rbind(masterDataFrame, tempDataFrame) 
} 

Về cơ bản, tôi đang đọc nhiều tệp csv trong một thư mục. Tôi muốn kết hợp tất cả các tệp csv vào một khung dữ liệu khổng lồ bằng cách xếp chồng các hàng. Vòng lặp có vẻ dài hơn khi masterDataFrame đang tăng kích thước. Tôi đang làm điều này trên một cụm linux.

Trả lời

12

Câu trả lời được cập nhật với data.table::fread.

require(data.table) 
out = rbindlist(lapply(theFiles, function(file) { 
     dt = fread(file) 
     # further processing/filtering 
     })) 

fread() tự động phát hiện tiêu đề, tập tin phân cách, lớp cột, không chuyển đổi chuỗi đến yếu tố theo mặc định .. xử lý dấu ngoặc kép nhúng, khá nhanh vv .. Xem ?fread để biết thêm.


Xem lịch sử câu trả lời cũ.

+0

Cảm ơn bạn. rbindlist thực sự tăng tốc độ lên! – WonderSteve

+6

Sử dụng 'fread' thay vì' read.csv' nếu bạn đang đi xuống đường dẫn data.table .... – mnel

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