我有一个名为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
(仅包括 1GB 文件中包含AREA
列中10GUD
的整行信息)
2015_10CLJ.txt
(其中仅包含包含10CLJ
的 1GB 文件中的整行信息)
我知道这个问题与其他问题非常相似,但不同的是我正在处理多达 2000 万行......任何人都可以通过某种循环(例如重复或其他方式)帮助我完成此操作吗?
无需使用循环。最简单,最快的方法可能是使用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)]
另外,我建议您使用fread{data.table}
读取数据,这比read.table
更快
Sales_2015 <- fread("C:/address to your file/Sales_2015.txt")