EXCEL 導入 R 的幾種方法 R—readr和readxl包


導入Excel數據至R語言的幾種方法

如有如下Excel數據源,如何將數據導入R語言呢?今天主要來介紹幾種常見的方法;


一、使用剪貼板然后使用read.table函數;

首先選擇Excel中的數據源,然后復制; 

在Rstudio中輸入如下腳本,回車即可; 

read.table("clipboard", header = TRUE)

注:header = TRUE,表示首行為標題行,若為FALSE則標題行也算在正文第一行,結果如下; 

二、將Excel另存為csv文件,然后使用read.csv函數;

打開Excel數據源,另存為example.csv文件;路徑為【C:\Users\Administrator\Desktop\example】


然后在Rstudio中輸入如下代碼,回車即可:

read.csv("C:/Users/Administrator/Desktop/example/example.csv", header = TRUE)

這里的header參數與使用剪貼板中的header參數用法一致,在此不在贅述;

注:在R中“\”是一個轉義字符,故需要將路徑中的“\”字符,使用“/”替代,或使用"\\"替代; 

 

三、將Excel另存為txt文本文件,然后使用read.table函數;

打開Excel數據源,另存為example.txt文件;路徑為【C:\Users\Administrator\Desktop\example】


然后在Rstudio中輸入如下代碼,回車即可;

read.table("C:/Users/Administrator/Desktop/example/example.txt", header = TRUE)

 

四、使用RODBC包(xls格式Excel文件)

之前使用過RODBC包連接過Postgresql,回復【postgresql】可查看相關文章;這是里同樣可以 使用RODBC中的odbcConnectExcel來創建與Excel的連接,獲取Excel中的數據;

> install.packages("RODBC")

> library(RODBC)

> conn <- odbcConnectExcel("C:/Users/Administrator/Desktop/example/example.xls")

> sqlTables(conn)

> sqlFetch(conn, "example")

> sqlQuery(conn, "select * from [example$]")

> odbcClose(conn)

其中example.xls中一個Excel文件(2003版本格式),example是工作薄中要讀取數據的工作表的名稱,conn是一個由odbcConnectExcel()返回的RODBC連接對象,mydataframe是返回的數據框。注:RODBC也可用於從Access導入數據,具體可以查看help(RODBC)幫助;

注:xlsx格式的Excel文件(2007、2010版)導入R語言會出錯,可用xlsx包來讀取這種格式的電子表格,腳本如下:

> install.packages("xlsx")

> library(xlsx)

> workbook <- "C:/Users/Administrator/Desktop/example/example.xlsx"

> mydataframe <- real.xlsx(workbook, 1)

> mydataframe

 

 


 

今天介紹了幾種導入Excel中的數據至R語言中的方法,包括利用剪貼板、通過將Excel導入csv格式或txt格式的文件,以及利用RODBC包(或xlsx包)的方法;鑒於xls版本較為老舊,建議采取前三種方法導入Excel數據; 

 

read.talbe以及read.csv及RODBC中相關函數的參數都很多,文章中只用了幾個常見的參數,其余參數均采取了默認的設置,可利用?read.talbe或help(read.table)等語法來查詢相關函數的具體幫助說明,例如使用?read.talbe語法查詢幫助; 


read.table的函數參數非常多,同時也會列出相關的函數,但最常用的也就幾個,如下:

read.table(file, header = FALSE, sep = "", quote = "\"'",dec = ".", skip = 0,strip.white = FALSE, blank.lines.skip = TRUE,comment.char = "#")

file,表示要讀取的文件:file可以是①絕對路徑或者相對路徑,但是一定要注意,在R中“\”是轉義符,故路徑需要寫成“/”或者“\\”; ②使用剪貼板;③使用file.choose(),彈出對話框,讓你選擇文件的位置。

header,表示數據文件中第一行是不是標題。默認為F(FALSE),認為數據文件中無標題;

sep,指定分隔符,默認是空格。quote是引號,默認是雙引號。dec是小數點的表示,默認就是一個點。skip是確定是否跳過某些行。strip.white確定是否消除空白字符。blank.lines.skip確定是否要跳過空白行。comment.char指定用於表示注釋的引導符號。

將數據快速讀入R—readr和readxl包

大 數 據

報道DT時代應用資訊及動態,爆料剖析行業熱點新聞

Hadley Wickham 和 RStudio團隊寫了一些新的R包,這些包對於每個需要在R中讀入數據的人來說都是非常有用的。readr包提供了一些在R中讀入文本數據的函數。readxl包提供了一些在R中讀入Excel電子表格數據的函數。它們的讀取速度遠遠超過你目前正在用的一些函數。

readr包提供了若干函數在R中讀取數據。我們通常會用R中的read.table家族函數來完成我們的數據讀入任務。這里,readr包提供了許多替代函數。它們增加了額外的一些功能並且速度快很多。

首先,read_table幾乎代替了read.table。下面通過讀取一個包含400萬行的數據來比較它們的區別。點擊這里下載該數據。

注1:在演示之前簡單說下我電腦的配置:win7,64位操作系統,8G內存,CPU A6雙核。電腦配置不行,原文給出的實驗時間甩了我好幾條街。但不管怎樣,在現有的條件下效率確實提高了很多。原文用時見末尾鏈接。

注2:如果讀取中文數據出現亂碼,在編輯器設置下字符編碼為"UTF-8"

system.time(read_table("C:\\Users\\a\\Desktop\\biggerfile.txt",
                       col_names=c("DAY","MONTH","YEAR","TEMP")))

system.time(read.table("C:\\Users\\a\\Desktop\\biggerfile.txt",
                       col.names=c("DAY","MONTH","YEAR","TEMP")))

這些命令看上去非常相似,但是read.table花的時間是50.62秒,而read_table完成相同的任務只花了2.76秒。這是因為read_table把數據當做是固定格式的文件,並且使用C++快速處理數據。

R中的基礎包utils也有讀取固定寬度數據的函數,下面的示例就能體現出readr的亮點:

system.time(read_fwf("C:\\Users\\a\\Desktop\\biggerfile.txt", 
                      fwf_widths(c(3,15,16,12),
                      col_names=c("DAY","MONTH","YEAR","TEMP"))))

system.time(read.fwf("C:\\Users\\a\\Desktop\\biggerfile.txt", 
                     c(3,15,16,12),
                     col.ames=c("DAY","MONTH","YEAR","TEMP")))

readr包的read_fwf函數用時3.97秒,而標准的read.fwf函數耗時1372秒。

readr包中的其它函數包括:read_csv讀取逗號分隔的數據(歐洲用的是read_csv2函數),read_tsv讀取制表符分隔數據,read_lines函數從文件中逐行讀取數據(非常適合復雜的后期處理)。它還可以讀取多種格式的日期時間列,智能的將文本數據讀取為字符串(不再需要設置strings.as.factors=FALSE)。

對於Excel格式的數據,這里有readxl包。這個包提供的函數可以讀取.xls和.xlsx格式的Excel工作表。雖然這里沒有演示read_execl函數的使用,但是它跟readr中的函數一樣都是基於C++庫的,因此讀取速度應該也很快。最重要的是,它沒有任何的外部依賴,因此你可以在任意平台上用它來讀取數據—不要求安裝了Excel。

readr包已發布在CRAN上,readxl可以從github安裝。

github地址:https://github.com/hadley/readxl


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM