R循环通过2000万行
我有一个名为Sales_2015的.txt文件,其中包含近1GB的信息。该文件包含以下列:R循环通过2000万行,r,loops,R,Loops,我有一个名为Sales_2015的.txt文件,其中包含近1GB的信息。该文件包含以下列: AREA|WEEKNUMBER|ITEM|STORE_NO|SALES|UNITS_SOLD 10GUD| W01_2015 |0345| 023234 |1200 | 12 该文件的colClasses是:crepcharacter,4,repnumeric,2 我想做的是将1GB文件分成几部分,这样读取速度会更快。我想要结束的.txt文件的数量将由我拥有的区域数量来定义。这是第一列 因此,我有以下变
AREA|WEEKNUMBER|ITEM|STORE_NO|SALES|UNITS_SOLD
10GUD| W01_2015 |0345| 023234 |1200 | 12
该文件的colClasses是:crepcharacter,4,repnumeric,2
我想做的是将1GB文件分成几部分,这样读取速度会更快。我想要结束的.txt文件的数量将由我拥有的区域数量来定义。这是第一列
因此,我有以下变量:
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文件中包含区域列中10GUD的整行信息
2015_10CLJ.txt,其中仅包含1GB文件中包含10CLJ的整行信息
我知道这个问题与其他问题非常相似,但不同的是,我正在处理多达2000万行的数据……有人能帮我通过某种循环(如重复或其他)来完成此任务吗?无需使用循环。最简单、最快的方法可能是使用data.table。我强烈建议您使用data.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快
当您首先读取2000万行data.frame时,也许您应该尝试使用fread{data.table},它比read.tablefread快得多。它大概可以在3秒钟内做到这一点。我不确定投反对票的人是谁。您可能已经解释了我们需要什么样的硬件资源。这严重限制了可能的操作。感谢@Arun的编辑,代码现在更加优雅和直观
Sales_2015 <- fread("C:/address to your file/Sales_2015.txt")