R导入Excel文件

示例

有几个R包可以读取excel文件,每个包使用不同的语言或资源,如下表所示:

R包用途
xlsx爪哇
XLconnect爪哇
openxlsxC ++
读xlC ++
远程ODBCODBC
数据佩尔

对于使用Java或ODBC的软件包,了解有关系统的详细信息很重要,因为取决于R版本和OS,您可能会遇到兼容性问题。例如,如果您使用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自动导入嵌入到中的预定义Excel单元格样式Book1.xlsx。当您希望格式化工作簿对象并导出格式正确的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文件

Excel文件可以与软件包一起导入 openxlsx

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文件

可以将Excel文件作为数据框导入R使用该readxl包。

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$];")

使用gdata包读取Excel文件

这里的例子