1.1 readxl
readxl软件包使R获取Excel数据变得方便简洁。与现有的软件包(例如:xlsx)相比,readxl没有外部依赖性,xlsx等包依赖java环境。readxl包容易在所有的操作系统安装使用。
readxl项目地址,本节大部分代码来源项目官网介绍,可自行查阅官网。
1.1.1 安装
从CRAN安装最新发行版本的最简单方法是安装整个tidyverse。
install.packages("tidyverse")
由于readxl不是tidyverse核心加载包,使用时仅需加载library(readxl)
或者是从CRAN仅安装readxl;
install.packages("readxl")
从github安装开发版:
# install.packages("devtools")
::install_github("tidyverse/readxl") devtools
1.1.2 用法
1.读取
readxl包中包含了几个示例文件,我们在接下来的案例中使用。
- 查看readxl包中自带xlsx文件
library(readxl)
readxl_example()
readxl_example("clippy.xls")
read_excel()
可读取xls和xlsx文件。
<- readxl_example("datasets.xlsx")
xlsx_example <- read_excel(xlsx_example)
dt
# 查看数据
head(dt)
# 查看数据类型
str(dt)
通过函数excel_sheets()
查看Excel的sheet名称
excel_sheets(xlsx_example)
指定worksheet的名字读取,可以是sheet的名字或序号。
当我们要读取的本地xlsx文件有多个sheets时,通过指定sheet参数读取指定的sheet。
read_excel(xlsx_example, sheet = "chickwts")
# not run
#read_excel(xlsx_example, sheet = 1)
#read_excel(xlsx_example, sheet = 3)
读取xlsx文件的指定范围,有多种方法控制。
本处提供几个案例,详情请?read_excel()
查看帮助。
readxl::read_excel参数如下:
read_excel(path, sheet = NULL, range = NULL, col_names = TRUE,
col_types = NULL, na = "", trim_ws = TRUE, skip = 0,
n_max = Inf, guess_max = min(1000, n_max),
progress = readxl_progress(), .name_repair = "unique")
range接受单元格范围,最简单的表示方式即Excle中单元格表示方法,如as range = “D12:F15” or range = “R1C12:R6C15”。
其余参数中,个人觉得col_types比较重要,可以指定列的类型。可用选项:“skip,” “guess,” “logical,” “numeric,” “date,” “text” or “list”。 .name_repair 参数能自动避免重复字段,可避免手工Excle出现的字段名不唯一的情况。
1.1.3 批量读取
某文件夹下有大量相同的Excel文件(sheet名称以及列字段相同),要合并全部Excel数据,代码如下:
<- list.files(path = './data/',pattern = '.xlsx$',full.names = T)
allfiles ::map_dfr(allfiles,read_excel) purrr
1.1.4 批量输出
我们按照一定条件拆解数据集,分别输出,代码如下:
library(tidyverse)
<- read_xlsx(path = './data/read-write/批量读写.xlsx')
dt
%>%
dt group_by(name) %>%
group_walk(~ write.csv(.x,file = file.path('data/read-write',paste0(.y$name,'.csv'))))
list.files(path = 'data/read-write/')
暂时不用理解批量读取和输出的代码具体含义,可以先记住用法。