[問題] for迴圈讀取大量csv

看板R_Language作者 (hotlin0709)時間7年前 (2018/04/03 10:09), 編輯推噓4(407)
留言11則, 8人參與, 7年前最新討論串1/2 (看更多)
[問題類型]:使用for迴圈讀取多資料夾內多個csv 處理 效能諮詢(我想讓R 跑更快) [軟體熟悉度]: 入門(寫過其他程式,只是對語法不熟悉) [問題敘述]: 我要讀取多個資料夾內的多個csv,然後讀進來後,全部資料做簡單的處理filter一些變數, 並將擷取完資料的某一欄位加總起來。 以下是我寫的方式,但是跑太久了......請問有比較快速的方法嗎? [程式範例]: library(dplyr) l<- list.files(path="/users/Johnny/downloads/M08A",pattern="*") bindtemp <- data.frame() temp <- data.frame() for (k in l){ ll<- list.files(path=paste("/users/Johnny/downloads/M08A/",k,sep = ''),pattern="*") for (i in ll) { file_names <- paste("/users/Johnny/downloads/M08A/",k,i,sep = '/') files <- list.files(path=file_names, pattern="*") for (file in files) { bindtemp <- read.csv(paste(file_names,file,sep="/"),header=F) temp <- rbind(temp,bindtemp) } } } df3<-temp %>% filter((V3=="03F0961N"|V3=="03F0846S"),V4==31) %>% summarise(n=sum(V5)) [關鍵字]: for迴圈 讀取多資料夾的CSV -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.136.218 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1522721365.A.C0C.html

04/03 10:14, 7年前 , 1F
先對每個檔案做filter 後再做bind
04/03 10:14, 1F

04/03 10:28, 7年前 , 2F
read.csv也可成fread之類的
04/03 10:28, 2F

04/03 11:01, 7年前 , 3F
好的好的感謝各位大大
04/03 11:01, 3F

04/03 11:26, 7年前 , 4F
parallel版本的fread大概是read.csv的數十倍快
04/03 11:26, 4F

04/03 11:26, 7年前 , 5F
read.csv真的蠻慢的,200MB大概要30多秒
04/03 11:26, 5F

04/03 11:27, 7年前 , 6F
fread大概是0.15秒
04/03 11:27, 6F

04/03 12:35, 7年前 , 7F
用lapply
04/03 12:35, 7F

04/03 13:09, 7年前 , 8F
用data.table來處理會快一點
04/03 13:09, 8F

04/03 20:45, 7年前 , 9F
記憶體夠的話lapply 搭配fread讀檔。 檔案很多可以試著用
04/03 20:45, 9F

04/03 20:45, 7年前 , 10F
foreach +doMC 平行跑應該會改善
04/03 20:45, 10F

04/03 20:58, 7年前 , 11F
先把資料都存到一個list,最後在合併就會快很多了
04/03 20:58, 11F
文章代碼(AID): #1Qmk9LmC (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1Qmk9LmC (R_Language)