有几个R包可以读取excel文件,每个包使用不同的语言或资源,如下表所示:
R包 | 用途 |
---|---|
xlsx | 爪哇 |
XLconnect | 爪哇 |
openxlsx | C ++ |
读xl | C ++ |
远程ODBC | ODBC |
数据 | 佩尔 |
对于使用Java或ODBC的软件包,了解有关系统的详细信息很重要,因为取决于R版本和OS,您可能会遇到兼容性问题。例如,如果您使用R 64位,则还必须具有Java 64位才能使用xlsx或XLconnect。
下面提供了一些使用每个软件包读取excel文件的示例。请注意,许多软件包具有相同或非常相似的功能名称。因此,像那样明确声明包是有用的package::function。该软件包openxlsx需要事先安装RTools。
library(xlsx)
必须导入工作表的索引或名称。
xlsx::read.xlsx("Book1.xlsx", sheetIndex=1) xlsx::read.xlsx("Book1.xlsx", sheetName="Sheet1")
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。
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)
可以将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"))
可以使用与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$];")
这里的例子