天天看點

R語言讀取Excel檔案的一系列陷阱

你想用R讀取一個Excel檔案,你覺得這事沒啥難的,就像所有的檔案讀取,隻需要知道檔案名就萬事大吉了。 于是,你把1.xls放到讀取.R的檔案夾下面,重命名為1.csv,打開rstudio,執行下面這條語句

a <- read.csv("1.csv")
           

出現了下面的報錯

Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") : cannot open file '1.csv': No such file or directory
           

很顯然,檔案并不在目前的路徑中,那目前的路徑是什麼呢?

接下來,執行擷取目前工作路徑的語句

> getwd()
[1] "C:/Users/13371/Documents"
           

這應該是rstudio預設的工作路徑了,那麼,如何才能将工作路徑更改為檔案所在的路徑呢?一個顯而易見的方法是使用setwd(···)或者是在菜單中手動設定,但這樣很麻煩,而且每次打開都要來一次,經過不懈查找,你終于找到了解決方案。

script.dir <- dirname(sys.frame(1)$ofile)
setwd(script.dir)
           

但是如果檔案在一個很遠的地方,那該怎麼辦呢?

# 這樣就可以自己選擇檔案了
b <- read.csv(file.choose())
           

按下run執行,咦,怎麼又彈出了這個你看都看不懂的報錯呢?

> script.dir <- dirname(parent.frame(2)$ofile)
Error in dirname(parent.frame(2)$ofile) : 
  a character vector argument expected
           

經過一番嘗試才知道,必須要使用source模式一次性執行完才可以,而這其中緣由你還是不太明白,希望有大佬可以指點迷津。

那,總可以運作了吧,還是不行,會報這樣的錯誤。

> a <- read.csv("1.csv")
Error in make.names(col.names, unique = TRUE) : 
  invalid multibyte string 1
In addition: Warning message:
In read.table(file = file, header = header, sep = sep, quote = quote,  :
  incomplete final line found by readTableHeader on '1.csv'
           

這是說CSV的格式不符合要求,這是因為簡單粗暴地改擴充名并不能得到一個正确的編碼。你需要規規矩矩地用Excel表打開,并且在另存為裡面的檔案格式下面勾選下圖所示的标準。

R語言讀取Excel檔案的一系列陷阱

第一次執行時會報這樣的錯誤,但你什麼也不需要做,再來一次,什麼都不會發生。

Warning messages:
1: In grepl("|||", what, fixed = TRUE) :
  input string 1 is invalid in this locale
2: In grepl("|||", what, fixed = TRUE) :
  input string 1 is invalid in this locale
           

這樣就沒有任何問題了,随随便便求某一列的均值方差:

> mean(a$X5.您的年齡是)
[1] 4.617391
> sd(a$X5.您的年齡是)
[1] 0.7560587
           

繼續閱讀