Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R循环通过2000万行_R_Loops - Fatal编程技术网

R循环通过2000万行

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文件的数量将由我拥有的区域数量来定义。这是第一列 因此,我有以下变

我有一个名为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文件的数量将由我拥有的区域数量来定义。这是第一列

因此,我有以下变量:

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")