将数字输入读为字符串R.

时间:2017-02-10 09:13:18

标签: r

所以,我有这个输入csv的形式,

id,No.,V,S,D
1,0100000109,623,233,331
2,0200000109,515,413,314
3,0600000109,611,266,662

我需要阅读No. Column(即作为一个角色)。我知道我可以使用这样的东西:

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)

但是,在这里我面临的问题是,第一个块只会将No Column读作字符,其余的块不会。

我该如何解决这个问题?

PS:原始输入文件有大约150多列和大约2000万行。

2 个答案:

答案 0 :(得分:0)

您需要在 repeat 过程中的read.csv()中提供列类型 colClasses 。 您不再拥有标题,因此您需要定义一个未命名的向量来指定 colClasses 。 假设colClasses的大小是150。

myColClasses=rep("numeric",150) myColClasses[2] <- "character" repeat { data_frame <- read.csv(con,nrows = chunk_size, colClasses=myColClasses, header = FALSE, quote="")     ...

答案 1 :(得分:0)

您可以使用b_nodes将数据读取为字符串并将其拆分:

readLines

或使用fileName <- "input.csv" df <- do.call(rbind.data.frame, strsplit(readLines(fileName), ",")[-1]) # skipping headlines colnames(df) <- c("id","No.","V","S","D") #adding headlines 的直接方法:

read.csv