【发布时间】:2016-12-01 13:23:05
【问题描述】:
我有一个较大的 CSV 文件(大于 6GB)。文件预览如下:
ID,NUM,MMSRATE,SMSRATE,DATARATE
1,0100000109,623,233,331
2,0200000109,515,413,314
3,0600000109,611,266,662
4,0700000109,729,490,927
5,0800000109,843,637,736
6,0600000109,578,367,875
我想找出 MMSRATE 和 SMSRATE 的区别,并将其存储在同一 csv 文件中的新列 PDRATE 中。预览如下:
ID,NUM,MMSRATE,SMSRATE,DATARATE,PDRATE
1,0100000109,623,233,333,390
2,0200000109,515,413,314,102
我有大约 100 万行。我想读取(比如 20000)块中的行,执行差异操作,然后将其写入输出 CSV 文件,然后读取接下来的 20000 行,对其执行操作并将其写入输出 CSV 文件等等.
我编写了一个代码来读取块中的行(为简单起见,为 2 行),但我无法在我的脚本中执行 2 列的差异。代码如下:
chunk_size <- 2
con <- file("input.csv", open = "r")
data_frame <- read.csv(con,nrows = chunk_size,quote="",header = TRUE,)
header <- names(data_frame)
print(header)
print(data_frame)
if(nrow(data_frame) == chunk_size) {
repeat {
data_frame <- read.csv(con,nrows = chunk_size, header = FALSE, quote="")
names(data_frame)<-c(header)
print(header)
print(data_frame)
if(nrow(data_frame) < chunk_size) {
break
}
}
}
close(con)
我对 Rscript 还很陌生。我正在 Windows 中运行 R Studio IDE。
注意:NUM 列中的前导零应保留在输出 CSV 文件中。请注意,我要求我处理 CSV 中的 CHUNKS 行,而不是整个 CSV 文件。
【问题讨论】:
-
为什么不能一次读取1M行?那不是那么大。那么它只是一个
df$PTDR <- df$MMSRATE - df$SMSRATE一次传递。 -
如果只是 csv 的问题,awk 可能最适合:
awk -F "," -v OFS="," 'NR==1{print $0,"PDRATE"} NR>1{end=$3-$4; print $0,end}' your_file.csv -
@Tensibai 这是给我的要求,即对 csv 中的行块执行列差异操作。所以我无法整体读取整个 csv 文件。你能提出可能的解决方案吗?
-
所以这是家庭作业,你应该说出来。没有人会在不知道需要满足此要求的情况下回答此要求。
-
@Tensibai 我将在我的帖子中进行必要的更改。