乐于分享
好东西不私藏

R语言导入Excel表格数据详解

R语言导入Excel表格数据详解

01

引言

在开始数据分析之前,我们首先需要把外部数据文件读入R语言中。前面我们已经讲解了R语言导入csv表格数据详解。这一节我们将继续讲解R语言如何导入Excel表格数据。它和csv表格是我们日常使用最多的数据格式。

02

教程

01
Excel文件格式:.xls 与 .xlsx

在开始导入之前,有必要先搞清楚这两个后缀名的区别。

对比维度.xls(旧版).xlsx(新版)
诞生时间Excel 2003及以前版本Excel 2007及以后版本
核心结构复合文档类型的二进制格式基于XML的压缩格式(本质是一个ZIP文件)
文件体积较大更小(经过压缩)
最大行数65,536行1,048,576行
最大列数256列(IV列)16,384列(XFD列)
兼容性旧版专用向下兼容,可打开.xls文件

简单来说,.xlsx 是更现代、更高效的文件格式,支持更大的数据量,且文件体积更小。在实际工作中,如果条件允许,建议优先使用 .xlsx 格式。

02
安装与加载 readxl 包
在R中导入Excel文件,最推荐的工具是 readxl包。它由RStudio团队开发,是tidyverse生态系统的一部分。
readxl的核心优势包括:
  • 无需外部依赖:不像 xlsx 包那样需要安装Java环境,安装和使用都非常简单。

  • 跨平台:在Windows、macOS、Linux上均可稳定运行。

  • 同时支持 .xls 和 .xlsx:底层分别通过 libxls 和 RapidXML 库解析两种格式。

首先安装并加载该包:

# 公众号【廿年一觉】演示所用# 安装 readxl(只需执行一次)install.packages("readxl")# 加载 readxllibrary(readxl)

注意:如果你已经安装了 tidyverse 全集,readxl 会自动安装,但仍需显式加载——因为它不是tidyverse核心包(即 library(tidyverse) 不会自动加载它)。

03
使用 read_excel() 导入Excel文件

readxl 包的核心函数是 read_excel(),用法非常直观——只需传入文件路径即可。

# 公众号【廿年一觉】演示所用# 导入整个Excel文件(默认读取第一个工作表)df <- read_excel("E:/Desktop/中国人口数及构成.xlsx")# 查看数据head(df)str(df)

read_excel() 默认将第一行作为列名,并自动推断每列的数据类型。返回的是一个 tibble(一种增强版的data.frame)。

运行结果如下:
04
常见问题及解决方法

1.指定工作表(Sheet)

Excel文件可能包含多个工作表。read_excel() 通过 sheet 参数指定要读取的工作表,可以使用工作表名称(字符串)或位置编号(整数,从1开始)。

# 公众号【廿年一觉】演示所用# 按名称指定df <- read_excel("E:/Desktop/中国人口数及构成.xlsx", sheet = "Sheet1")# 按位置指定(第一个工作表)df <- read_excel("E:/Desktop/中国人口数及构成.xlsx", sheet = 1)

2.指定读取范围(Range)

如果只想读取Excel文件中的某一块区域(而非整个工作表),可以使用 range 参数。

# 公众号【廿年一觉】演示所用# 读取指定单元格区域(类似Excel中的选区)df <- read_excel("E:/Desktop/中国人口数及构成.xlsx", range = "A1:F20")# 也可以包含工作表名称df <- read_excel("E:/Desktop/中国人口数及构成.xlsx", range = "Sheet1!A1:F20")

3.处理非标准表头

有些Excel文件的表头不在第一行,或者有多行表头。这时可以用 skip 跳过前面的行,或者用 col_names = FALSE 不让第一行作为列名。

# 公众号【廿年一觉】演示所用# 跳过前2行,从第3行开始读取df <- read_excel("E:/Desktop/中国人口数及构成.xlsx", skip = 2)# 不将第一行作为列名,后续自行设置df <- read_excel("E:/Desktop/中国人口数及构成.xlsx", col_names = FALSE)

4.手动指定列类型

当自动类型推断不准确时(例如日期被识别为数字、数值被识别为文本),可以用 col_types 手动指定。

# 公众号【廿年一觉】演示所用# 手动指定每列的类型df <- read_excel(  "E:/Desktop/中国人口数及构成.xlsx",  col_types = c("text", "numeric", "date", "skip", "guess"))# "skip" 表示跳过该列不读取# "guess" 表示让R自动推断
可用的列类型包括:"skip"、"guess"、"logical"、"numeric"、"date"、"text"、"list"。
05
常用参数总结

tidread_excel() 提供了丰富的参数来控制导入行为,以下是几个最常用的:

参数
用法
示例
sheet指定工作表(名称或编号)sheet = "Sheet1"
range指定读取的单元格范围range = "A1:C10"
col_names是否将第一行作为列名col_names = TRUE(默认)
col_types手动指定每列的数据类型col_types = c("text", "numeric", "date")
na指定哪些值视为缺失值na = c("", "NA", "-")
skip跳过前几行再开始读取skip = 2
n_max最多读取多少行数据n_max = 100
trim_ws是否去除单元格内容首尾空格trim_ws = TRUE(默认)
06
其他可选的导入包
除了 readxl,R中还有几个常用的Excel导入包,可以根据需要选择。
包名
特点
适用场景
readxl无外部依赖,简单易用首选推荐,适合绝大多数场景
openxlsx支持读写,可保留格式信息需要保留Excel格式(颜色、样式等)时
xlsx功能强大,但依赖Java环境处理复杂格式,但需配置Java
openxlsx 的基本用法如下:
# 公众号【廿年一觉】演示所用# 安装并加载install.packages("openxlsx")library(openxlsx)# 读取Excel文件df <- read.xlsx("E:/Desktop/中国人口数及构成.xlsx", sheet = 1)

03

总结

  • 首选方法:readxl 包无需Java环境、跨平台、简单易用,是导入Excel数据的首选。
  • 核心函数:read_excel(),只需传入文件路径即可完成导入。

  • 常用参数:sheet(指定工作表)、range(指定区域)、col_names(列名设置)、col_types(列类型)、skip(跳过行)。

  • 数据查验:导入后立刻用 head()、str()、summary() 检查数据是否正确。

祝大家学习愉快,下期再见!

好了,本文就讲到这,你学会了吗?如有问题,欢迎留言。觉得有帮助的话,点个赞再走吧!
·end·
—如果喜欢,快分享给你的朋友们吧—
每天改变一点点,你将发现大的不同
阐释基础概念;
传播前沿讯息。
版权声明:

本文为原创文章,版权归本公众号所有。转载请注明来源。

相关学习资料