匯入 Excel 檔案
有幾個 R 包可以讀取 excel 檔案,每個檔案使用不同的語言或資源,如下表所示:
R 包 | 用途 |
---|---|
XLSX |
Java |
XLconnect |
Java |
openxlsx |
C++ |
readxl |
C++ |
RODBC |
ODBC |
GDATA |
Perl |
對於使用 Java 或 ODBC 的軟體包,瞭解系統的詳細資訊非常重要,因為根據你的 R 版本和作業系統,可能存在相容性問題。例如,如果你使用的是 R 64 位,那麼你還必須使用 Java 64 位來使用 xlsx
或 XLconnect
。
下面提供了使用每個包讀取 excel 檔案的一些示例。請注意,許多軟體包具有相同或非常相似的函式名稱。因此,明確說明包,如 package::function
是很有用的。openxlsx
包需要事先安裝 RTools。
使用 xlsx 包讀取 excel 檔案
library(xlsx)
要匯入工作表的索引或名稱。
xlsx::read.xlsx("Book1.xlsx", sheetIndex=1)
xlsx::read.xlsx("Book1.xlsx", sheetName="Sheet1")
使用 XLconnect 包讀取 Excel 檔案
library(XLConnect)
wb <- XLConnect::loadWorkbook("Book1.xlsx")
# Either, if Book1.xlsx has a sheet called "Sheet1":
sheet1 <- XLConnect::readWorksheet(wb, "Sheet1")
# Or, more generally, just get the first sheet in Book1.xlsx:
sheet1 <- XLConnect::readWorksheet(wb, getSheets(wb)[1])
XLConnect
自動匯入 Book1.xlsx
中嵌入的預定義 Excel 單元格樣式。當你希望格式化工作簿物件並匯出格式完美的 Excel 文件時,這非常有用。首先,你需要在 Book1.xlsx
中建立所需的單元格格式並儲存它們,例如 myHeader
,myBody
和 myPcts
。然後,在 R
中載入工作簿後(見上文):
Headerstyle <- XLConnect::getCellStyle(wb, "myHeader")
Bodystyle <- XLConnect::getCellStyle(wb, "myBody")
Pctsstyle <- XLConnect::getCellStyle(wb, "myPcts")
單元格樣式現在儲存在 R
環境中。要將單元格樣式指定給資料的某些範圍,你需要定義範圍,然後指定樣式:
Headerrange <- expand.grid(row = 1, col = 1:8)
Bodyrange <- expand.grid(row = 2:6, col = c(1:5, 8))
Pctrange <- expand.grid(row = 2:6, col = c(6, 7))
XLConnect::setCellStyle(wb, sheet = "sheet1", row = Headerrange$row,
col = Headerrange$col, cellstyle = Headerstyle)
XLConnect::setCellStyle(wb, sheet = "sheet1", row = Bodyrange$row,
col = Bodyrange$col, cellstyle = Bodystyle)
XLConnect::setCellStyle(wb, sheet = "sheet1", row = Pctrange$row,
col = Pctrange$col, cellstyle = Pctsstyle)
請注意,XLConnect
很容易,但格式化可能會變得非常慢。openxlsx
提供了更快,但更麻煩的格式化選項。
使用 openxlsx 包讀取 excel 檔案
可以使用包 openxlsx
匯入 Excel 檔案
library(openxlsx)
openxlsx::read.xlsx("spreadsheet1.xlsx", colNames=TRUE, rowNames=TRUE)
#colNames: If TRUE, the first row of data will be used as column names.
#rowNames: If TRUE, first column of data will be used as row names.
可以通過在 sheet
引數中提供其位置來選擇應該讀入 R 的工作表:
openxlsx::read.xlsx("spreadsheet1.xlsx", sheet = 1)
或者通過宣告其名稱:
openxlsx::read.xlsx("spreadsheet1.xlsx", sheet = "Sheet1")
此外,openxlsx
可以檢測讀取表中的日期列。為了允許自動檢測日期,應將引數 detectDates
設定為 TRUE
:
openxlsx::read.xlsx("spreadsheet1.xlsx", sheet = "Sheet1", detectDates= TRUE)
使用 readxl 包讀取 excel 檔案
可以使用 readxl
軟體包將 Excel 檔案作為資料框匯入 R
。
library(readxl)
它可以讀取 .xls
和 .xlsx
檔案。
readxl::read_excel("spreadsheet1.xls")
readxl::read_excel("spreadsheet2.xlsx")
要匯入的工作表可以通過編號或名稱指定。
readxl::read_excel("spreadsheet.xls", sheet = 1)
readxl::read_excel("spreadsheet.xls", sheet = "summary")
引數 col_names = TRUE
將第一行設定為列名。
readxl::read_excel("spreadsheet.xls", sheet = 1, col_names = TRUE)
引數 col_types
可用於將資料中的列型別指定為向量。
readxl::read_excel("spreadsheet.xls", sheet = 1, col_names = TRUE,
col_types = c("text", "date", "numeric", "numeric"))
使用 RODBC 包讀取 excel 檔案
可以使用與 Windows 的 Access 資料庫引擎(ACE)(以前稱為 JET)連線的 ODBC Excel 驅動程式讀取 Excel 檔案。使用 RODBC 包,R 可以連線到此驅動程式並直接查詢工作簿。假設工作表在第一行中維護列標題,並在相似型別的有組織列中維護資料。注意: 此方法僅限於 Windows / PC 計算機,因為 JET / ACE 安裝了 .dll 檔案,而在其他作業系統上不可用。
library(RODBC)
xlconn <- odbcDriverConnect('Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};
DBQ=C:\\Path\\To\\Workbook.xlsx')
df <- sqlQuery(xlconn, "SELECT * FROM [SheetName$]")
close(xlconn)
使用此方法連線 SQL 引擎,可以查詢 Excel 工作表,類似於資料庫表,包括 JOIN
和 UNION
操作。語法遵循 JET / ACE SQL 方言。注意: 只有資料訪問 DML 語句,特別是 SELECT
可以在工作簿上執行,被認為是不可更新的查詢。
joindf <- sqlQuery(xlconn, "SELECT t1.*, t2.* FROM [Sheet1$] t1
INNER JOIN [Sheet2$] t2
ON t1.[ID] = t2.[ID]")
uniondf <- sqlQuery(xlconn, "SELECT * FROM [Sheet1$]
UNION
SELECT * FROM [Sheet2$]")
甚至可以從指向當前工作簿的同一 ODBC 通道查詢其他工作簿:
otherwkbkdf <- sqlQuery(xlconn, "SELECT * FROM
[Excel 12.0 Xml;HDR=Yes;
Database=C:\\Path\\To\\Other\\Workbook.xlsx].[Sheet1$];")