2017-02-12 58 views
0

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

错误扫描(文件=文件,内容=什么,月=月,报价=报价,DEC =月,: 扫描()预计 '真正的',得到了''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)) 

任何想法如何最好的?由于

+0

如果使用'readr :: read_csv'会怎么样?和,你从哪里获得CSV文件?该网站具有XLS文件。 – hrbrmstr

+1

'df < - readxl :: read_excel(“〜/ Desktop/native_load_2017.xls”); df < - dplyr :: filter(df,!is.na(COAST))'将会成为一种更好的方法来手动从Excel中保存您现在可能正在执行的CSV的CSV。 – hrbrmstr

+0

我已经从XLS手动创建了CSV,我完全忘了提及它。这些文件需要以CSV格式存储,我不能使用XLS格式... – Xavier

回答

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() 
) 
> 

可以看到香味列被解析为字符(因为你注意到最后一排中的值格式的差异)。下面,将第一列指定为字符,将缺省值指定为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 
+0

谢谢你在文件中的逗号,我完全错过了! – Xavier

+0

@XavierGuérette没问题,很高兴它解决了! –