Skip to content

R - Excel 文件

Microsoft Excel(.xls、.xlsx)是一种无处不在的电子表格程序。与 Excel 文件交互是数据分析中的常见任务。虽然有多个包可以将 R 语言与 Excel 连接起来,但现代标准是使用 readxl 和 writexl 包。

为什么选择 readxl 和 writexl? 像 xlsx 或 gdata 这样的旧包通常依赖于 Java 或 Perl,这可能导致速度慢且设置困难。而 readxl 和 writexl 包具有以下优点:

  • 速度快:它们使用 C/C++ 编写,性能高。
  • 无依赖:它们没有像 Java 这样的外部依赖,使得在任何系统上的安装和使用都非常顺畅。
  • 与 Tidyverse 兼容:readxl 是核心 tidyverse 的一部分,并且与 dplyr 和 ggplot2 等其他包配合良好。

你可以在 R 控制台中运行以下命令,从 CRAN(R 综合档案网络)安装这两个包。

install.packages(c("readxl", "writexl"))

创建一个名为 input.xlsx 的 Excel 文件。在第一个工作表(通常默认名为 Sheet1)中,输入以下员工数据:

id name salary start_date dept
1 Rick 623.3 2012-01-01 IT
2 Dan 515.2 2013-09-23 Operations
3 Michelle 611 2014-11-15 IT
4 Ryan 729 2014-05-11 HR
5 Gary 843.25 2015-03-27 Finance
6 Nina 578 2013-05-21 IT
7 Simon 632.8 2013-07-30 Operations
8 Guru 722.5 2014-06-17 Finance

接下来,创建第二个工作表并将其命名为 cities。输入以下地点数据:

name city
Rick Seattle
Dan Tampa
Michelle Chicago
Ryan Seattle
Gary Houston
Nina Boston
Simon Mumbai
Guru Dallas

将文件 input.xlsx 保存到你的 R 项目的工作目录中。

我们使用 readxl 包中的 read_excel() 函数。结果将作为 tibble(一种现代数据框)导入。

# 加载库
library(readxl)
# 按索引(基于 1 的)读取第一个工作表
# 如果未指定,read_excel() 足够智能,会自动查找第一个工作表。
employee_data <- read_excel("input.xlsx", sheet = 1)
print(employee_data)
# 按名称读取第二个工作表
city_data <- read_excel("input.xlsx", sheet = "cities")
print(city_data)

当我们执行上述代码时,会产生以下输出:

# A tibble: 8 × 5
id name salary start_date dept
<dbl> <chr> <dbl> <dttm> <chr>
1 1 Rick 623. 2012-01-01 00:00:00 IT
2 2 Dan 515. 2013-09-23 00:00:00 Operations
3 3 Michelle 611 2014-11-15 00:00:00 IT
4 4 Ryan 729 2014-05-11 00:00:00 HR
5 5 Gary 843. 2015-03-27 00:00:00 Finance
6 6 Nina 578 2013-05-21 00:00:00 IT
7 7 Simon 633. 2013-07-30 00:00:00 Operations
8 8 Guru 722. 2014-06-17 00:00:00 Finance
# A tibble: 8 × 2
name city
<chr> <chr>
1 Rick Seattle
2 Dan Tampa
3 Michelle Chicago
4 Ryan Seattle
5 Gary Houston
6 Nina Boston
7 Simon Mumbai
8 Guru Dallas

writexl 包使用 write_xlsx() 函数,使得将数据框或 tibble 写入 .xlsx 文件变得极其简单。

假设我们已经合并了两个数据集,并希望导出结果。

# 加载必要的库
library(writexl)
library(dplyr)
# 合并之前导入的两个数据集
full_data <- left_join(employee_data, city_data, by = "name")
# 将合并后的数据写入新的 Excel 文件
# 文件将在你的工作目录中创建
write_xlsx(full_data, path = "output_data.xlsx")
cat("Successfully wrote combined data to output_data.xlsx")

运行此代码后,你的项目文件夹中将出现一个名为 output_data.xlsx 的新文件,其中包含合并后的数据。你甚至可以通过将多个数据框作为命名列表传递,将它们写入同一个文件的不同工作表:

# 写入多个工作表的示例
list_of_datasets <- list("Employees" = employee_data, "Locations" = city_data)
write_xlsx(list_of_datasets, path = "multisheet_output.xlsx")