【问题标题】:Error Reading a CSV File in R在 R 中读取 CSV 文件时出错
【发布时间】:2017-02-12 18:56:34
【问题描述】:

我正在尝试从http://www.ercot.com/gridinfo/load/load_hist 读取一堆文件,除了最后一个文件(2017 年的文件)之外,所有文件都可以使用 read.csv 正确读取。当我尝试使用read.csv 读取文件时,我得到以下错误:

扫描错误(文件 = 文件,什么 = 什么,sep = sep,quote = quote,dec = dec,: scan() 期望 'a real',得到 '"8'

但是,我使用 Excel 进行了检查,文件中没有 "8 或 8 值。错误消息似乎很清楚,但我找不到"8 或8,即使我读取了0 行(使用nrows 函数的nrows 参数),我也有同样的问题。

 hold2  <- read.csv(paste(PATH, "\\CSV\\", "native_load_2017.csv", sep=""), header=TRUE, sep=",", dec = ".", colClasses=c("character",rep("double",9)))

hold2  <- read.csv(paste(PATH, "\\CSV\\", "native_load_2017.csv", sep=""), header=TRUE, sep=",", dec = ".", colClasses=c("character",rep("double",9)), nrows=0)

此外,在文件的最后一行中,有些值不符合文件其余部分的格式。我想跳过最后一行,但 read.csv 函数中没有参数可以做到这一点。有什么解决办法吗?我正在考虑或使用类似的东西:

hold2  <- read.csv(paste(PATH, "\\CSV\\", "native_load_2017.csv", sep=""), header=TRUE, sep=",", dec = ".", colClasses=c("character",rep("double",9)), nrows=nrow(read.csv(paste(PATH, "\\CSV\\", "native_load_2017.csv", sep=""))-1))

关于如何做到最好的任何想法?谢谢

【问题讨论】:

  • 如果你使用readr::read_csv会发生什么?并且,您从哪里获取 CSV 文件?该网站有 XLS 文件。
  • df &lt;- readxl::read_excel("~/Desktop/native_load_2017.xls") ; df &lt;- dplyr::filter(df, !is.na(COAST)) 可能是从 Excel 手动保存 CSV 的更好方法,您现在可能正在这样做。
  • 我已经从 XLS 手动创建了 CSV,我完全忘了提及它。文件需要以 CSV 格式存储,我不能使用 XLS 格式...
  • 使用 R 进行转换。

标签: r csv import


【解决方案1】:

使用readr包

> df <- readr::read_csv("~/Desktop/native_load_2017.csv")
Parsed with column specification: 
cols(   
`Hour Ending` = col_character(),
 COAST = col_number(),
 EAST = col_number(),
 FWEST = col_number(),
 NORTH = col_number(),
 NCENT = col_number(),
 SOUTH = col_number(),
 SCENT = col_character(),
 WEST = col_number(),
 ERCOT = col_number()
)
>

可以看到 SCENT 列被解析为字符(由于您注意到的最后一行中值的格式不同)。下面,将第一列指定为字符,将默认列指定为 col_number() 来读取文件(注意:col_number() 处理您作为双精度列存在的逗号和小数点)。

options(digits=7)
df <- readr::read_csv("~/Desktop/native_load_2017.csv", col_types = cols(
  `Hour Ending` = col_character(),
  .default = col_number())
)
sapply(df, class) 
#df[complete.cases(df),] # to remove the last row if needed

【讨论】:

  • 感谢您对文件中逗号的提醒,我完全错过了!
猜你喜欢
  • 2013-08-28
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
相关资源
最近更新 更多