R循环通过2000万行

时间:2016-06-19 00:30:42

标签: r loops

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

AREA|WEEKNUMBER|ITEM|STORE_NO|SALES|UNITS_SOLD
10GUD| W01_2015 |0345| 023234 |1200 | 12

文件的 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

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

2015_10GUD.txt(仅包含10GUD列中包含AREA的1GB文件中的整行信息

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

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

1 个答案:

答案 0 :(得分:5)

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

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

另外,我建议您使用fread{data.table}来阅读您的数据,这比read.table更快

Sales_2015 <- fread("C:/address to your file/Sales_2015.txt")