作者hotlin0709 (hotlin0709)
看板R_Language
標題[問題] for迴圈讀取大量csv
時間Tue Apr 3 10:09:22 2018
[問題類型]:使用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
推 obarisk: 先對每個檔案做filter 後再做bind 04/03 10:14
推 chuubbyy: read.csv也可成fread之類的 04/03 10:28
→ hotlin0709: 好的好的感謝各位大大 04/03 11:01
→ clansoda: parallel版本的fread大概是read.csv的數十倍快 04/03 11:26
→ clansoda: read.csv真的蠻慢的,200MB大概要30多秒 04/03 11:26
→ clansoda: fread大概是0.15秒 04/03 11:27
→ HumuHumu: 用lapply 04/03 12:35
推 Luluemiko: 用data.table來處理會快一點 04/03 13:09
推 tcman02: 記憶體夠的話lapply 搭配fread讀檔。 檔案很多可以試著用 04/03 20:45
→ tcman02: foreach +doMC 平行跑應該會改善 04/03 20:45
→ celestialgod: 先把資料都存到一個list,最後在合併就會快很多了 04/03 20:58