首页 文章

在R中读取CSV文件时出错

提问于
浏览
0

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

Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : scan() expected 'a real', got '"8'

但是,我已使用Excel进行检查,文件中没有 "88 值 . 错误消息似乎很清楚,但我找不到 "88 ,即使我读取0行( read.csv 函数的 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))

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

1 回答

  • 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()处理您所拥有的列中的逗号和小数点为double) .

    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
    

相关问题