导入诸如 CSV 之类文本格式的数据的优点是不需要依靠某些特定软件来读取数据,并

且文件具有可读性,即软件中性。然而,它的缺点也很明显——我们不能直接对文本编辑

器中的数据执行计算操作,因为这些内容是纯文本格式的。

Excel 工作簿是另一种存储表格数据的常用格式。一个 Excel 工作簿可以包含一个或多

个工作表。每个工作表都是一个网格,可以直接填入文本和数值来创建表格。利用这些表,

可以轻松地在表格内,表格间或甚至工作表之间执行计算操作。Microsoft Excel 是一个功

能强大的软件,但它的数据格式(Excel 97-2003 版本为.xls,Excel 2007 以后的版本为.xlsx)

却不能被直接读取。

例如,data/prices.xlsx 是一个简单的 Excel 工作

簿,如图 7-2 所示。

读写 Excel 工作表_扩展包

虽然 R 中没有提供用来读取 Excel 工作簿的内置函数,

但一些 R 扩展包却可以对它进行操作。最简单的一个包是

readxl (https://github.com/hadley/readxl),它能够轻松地提取存

储在单个Excel 工作簿中的表格。用install.packages("readxl")从镜像中安装扩展包:

readxl::read_ _excel("data/prices.xlsx")

## Date Price Growth

## 1 2016-03-01 85 NA

## 2 2016-03-02 88 0.03529412

## 3 2016-03-03 84 -0.04545455

## 4 2016-03-04 81 -0.03571429

## 5 2016-03-05 83 0.02469136

## 6 2016-03-06 87 0.04819277

根据上面这个数据框,显然 read_excel( )会自动将 Excel 中的日期数据转换为 R

中的日期数据,并且正确地保留了 Growth 列中的缺失值。

openxlsx 扩展包也可以处理Excel 工作簿。这个包可以读取、写入和编辑 xlsx 文件,它

比 readxl 设计的更全面。我们可以运行 install.packages("openxlsx")来安装这个包。

利用 openxlsx,调用 read.xlsx( )将指定工作簿中的数据读入数据框,类似于

readxl::read_excel( ):

openxlsx::read.xlsx("data/prices.xlsx", detectDates = TRUE)

## Date Price Growth

## 1 2016-03-01 85 NA

## 2 2016-03-02 88 0.03529412

## 3 2016-03-03 84 -0.04545455

## 4 2016-03-04 81 -0.03571429

## 5 2016-03-05 83 0.02469136

## 6 2016-03-06 87 0.04819277

为了确保正确地导入日期值,我们需要指定 detectDates = TRUE;否则,日期数

据将会被存为数值数据,你可以尝试一下。除了读取数据之外,openxlsx 也可以用现有

的数据框创建工作簿:

openxlsx::write.xlsx(mtcars, "data/mtcars.xlsx")

这个扩展包支持更高级的功能,如通过创建样式和插入绘图来编辑现有工作簿,但这

些功能超出了本书的范围。要想了解更多详细信息,可以阅读这个包的文档。

还有一些其他的包也可以用于处理 Excel 工作簿。XLConnect(http://cran.r-project.org/

web/packages/XLConnect)是另一个跨平台的Excel 连接器,它不依赖于安装的 Microsoft Excel,

但却依赖于安装的 Java 运行环境(JRE)。RODBC(http://cran.r-project.org/web/packages/

RODBC)是一个更通用的数据库连接器,可以在 Windows 上用安装好的 ODBC 驱动程序

连接到 Access 数据库和 Excel 工作簿。由于这两个包有较强的依赖性,因此在这个部分我

们就不加以介绍了。