作者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://webptt.com/cn.aspx?n=bbs/R_Language/M.1522721365.A.C0C.html
1F:推 obarisk: 先对每个档案做filter 後再做bind 04/03 10:14
2F:推 chuubbyy: read.csv也可成fread之类的 04/03 10:28
3F:→ hotlin0709: 好的好的感谢各位大大 04/03 11:01
4F:→ clansoda: parallel版本的fread大概是read.csv的数十倍快 04/03 11:26
5F:→ clansoda: read.csv真的蛮慢的,200MB大概要30多秒 04/03 11:26
6F:→ clansoda: fread大概是0.15秒 04/03 11:27
7F:→ HumuHumu: 用lapply 04/03 12:35
8F:推 Luluemiko: 用data.table来处理会快一点 04/03 13:09
9F:推 tcman02: 记忆体够的话lapply 搭配fread读档。 档案很多可以试着用 04/03 20:45
10F:→ tcman02: foreach +doMC 平行跑应该会改善 04/03 20:45
11F:→ celestialgod: 先把资料都存到一个list,最後在合并就会快很多了 04/03 20:58