【发布时间】:2017-08-08 07:39:40
【问题描述】:
我是使用 R 编程的新手。
我正在尝试编写一个循环,在该循环中分别读取数据块(因为数据大小为 20GB,包含 3 亿行)并执行代码来创建日期列并将每个块作为 csv 文件写入每个文件夹。以下是另一位成员建议的试验。它运行顺利,但唯一的问题是,一旦执行该过程,我就无法在同一个循环中写入每个块。
index = 0
nrows = length(count.fields("RM.csv", sep = ","))
df = vector('list',ceiling(nrows/2))
col_names = colnames(read.csv('RM.csv', nrow=1, header = T))
end_found=FALSE
while(!end_found)
{
begin = 1000*index
end = min(nrows,begin+1000)
print(paste0("Reading rows ", begin+1 ," to ", end ))
df[[index+1]] = fread('RM.csv',skip = begin, nrows =end-begin,
col.names = col_names)
index = index+1
if(end==nrows) end_found=TRUE
df = do.call(as.data.frame,df)
write.csv(df,file = paste0('test1',index,'.csv'))
}
数据:
RM.csv:
Date
1 7/30/2017 19:16
2 7/30/2017 19:05
3 7/30/2017 19:03
4 7/30/2017 19:37
5 7/30/2017 18:36
6 7/30/2017 20:08
7 7/30/2017 19:00
8 7/30/2017 19:21
9 7/30/2017 17:01
期望的输出:
Date Month Year
1 7/30/2017 19:16 Jul-17 2017
2 7/30/2017 19:05 Jul-17 2017
3 7/30/2017 19:03 Jul-17 2017
4 7/30/2017 19:37 Jul-17 2017
5 7/30/2017 18:36 Jul-17 2017
6 7/30/2017 20:08 Jul-17 2017
7 7/30/2017 19:00 Jul-17 2017
8 7/30/2017 19:21 Jul-17 2017
9 7/30/2017 17:01 Jul-17 2017
【问题讨论】:
-
你能描述一下预期的输出是什么吗?不知道
RM.csv的样子有点难以想象。此外,循环和重复读取一个大的输入文件也是一个坏主意。 -
您知道可以将数据附加到文件中吗?阅读
write.table的帮助页面。 -
@Adam Quek 我已经更新了我的问题。因此,假设我使用此循环提取了包含日期的 9 行块,而不是为同一块创建了两个多列(例如月份和年份),并且它应该在同一目录中写出一个 csv 文件。稍后使用批处理脚本或 MySQL 我将附加这些文件。