在R中读取CSV文件时出错

时间:2017-02-12 18:56:34

标签: r csv import

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

扫描错误(file = file,what = what,sep = sep,quote = quote,dec = dec,:   scan()期待'真实',得''8'

但是,我已使用Excel进行检查,文件中没有read.csv"8值。错误消息似乎很清楚,但我找不到8"8,即使我读了0行(8的{​​{1}}参数,我也有同样的问题{1}}功能)。

nrows

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

 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)

有关如何做到这一点的任何想法?感谢

1 个答案:

答案 0 :(得分:0)

使用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