R循环通过2000万行

Max*_*ina -1 loops r

我有一个.txt文件Sales_2015,它有几乎1GB的信息.该文件包含以下列:

AREA|WEEKNUMBER|ITEM|STORE_NO|SALES|UNITS_SOLD
10GUD| W01_2015 |0345| 023234 |1200 | 12
Run Code Online (Sandbox Code Playgroud)

File的colClasses是:c(rep("character",4),rep("numeric",2))

我想要做的是将1GB文件分成几块,以便更快阅读..txt我想要结束的文件数量将由我拥有的AREAS数量来定义.(这是第一栏).

所以我有以下变量:

Sales <- read.table(paste(RUTAC,"/Sales_2015.txt",sep=""),sep="|",header=T, quote="",comment.char="",colClasses=c("character",rep("numeric",3)))

Areas <- c("10GUD","10CLJ","10DZV",..................) #There is 52 elements
Run Code Online (Sandbox Code Playgroud)

我想最终得到52个.txt文件,例如:

2015_10GUD.txt(这将只包括含有从1GB的文件信息的整行10GUDAREA列)

2015_10CLJ.txt(其中只包含1GB文件中包含的整行信息10CLJ)

我知道这个问题与其他问题非常相似,但不同之处在于我正在处理多达2000万行......任何人都可以通过某种循环(如重复或其他方式)来帮助我完成这项工作吗?

raf*_*ira 5

无需使用循环.最简单,最快捷的方法就是使用data.table.我强烈建议您使用data.table 1.9.7的开发版本.所以你可以使用超快速fwrite功能来写.csv文件.转到此处获取安装说明.

library(data.table)
setDT(Sales_2015)[, fwrite(.SD, paste0("Sales_2015_", ID,".csv")), 
                              by = AREA, .SDcols=names(Sales_2015)]
Run Code Online (Sandbox Code Playgroud)

另外,我建议你使用读取数据fread{data.table},这比waaaay快read.table

Sales_2015 <- fread("C:/address to your file/Sales_2015.txt")
Run Code Online (Sandbox Code Playgroud)