2017-02-12 107 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沒問題,很高興它解決了! –