【发布时间】:2017-06-28 13:47:11
【问题描述】:
所以,我有这个表单的输入 csv,
id,No.,V,S,D
1,0100000109,623,233,331
2,0200000109,515,413,314
3,0600000109,611,266,662
我需要按原样阅读编号列(即作为一个字符)。我知道我可以使用这样的东西:
data <- read.csv("input.csv", colClasses = c("MSISDN" = "character"))
我有一个代码,用于分块读取 csv 文件:
chunk_size <- 2
con <- file("input.csv", open = "r")
data_frame <- read.csv(con,nrows = chunk_size,colClasses = c("MSISDN" = "character"),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)
但是,我面临的问题是,第一个块只会读取编号列作为字符,其余块不会。
我该如何解决这个问题?
PS:原始输入文件大约有 150 多列和大约 2000 万行。
【问题讨论】:
-
为什么要分块阅读?
-
你最终的
read.csv不像其他两个那样使用colClasses。 -
@Remko 在最终的 read.csv 中我无法添加 colClasses,因为我在该语句中设置了 header=false。
-
一个直接的解决方案是使用
readLines以字符串形式读取文件,并使用split获取列... -
@holzben你能详细说明一下吗,我对 R 还很陌生
标签: r