Species Sepal.Length
1 setosa 50
2 versicolor 50
3 virginica 50
5 数据操作
目前, R 语言在数据操作方面陆续出现三套工具,最早的是 Base R(1997 年 4月),之后是 data.table(2006年4月) 和 dplyr(2014 年1月)。下面将从世界银行下载的原始数据开始,以各种数据操作及其组合串联起来介绍,完成数据探查的工作。
5.1 操作工具
本节所用数据来自世界银行,介绍 Base R、data.table、dplyr 的简介、特点、对比
5.1.1 Base R
在 data.frame 的基础上,提供一系列辅助函数实现各类数据操作。
5.1.2 data.table
data.table 包在 Base R 的基础上,扩展和加强了原有函数的功能,提供一套完整的链式操作语法。
5.1.3 dplyr
dplyr 包提供一套全新的数据操作语法,与 purrr 包和 tidyr 包一起形成完备的数据操作功能。在 R 环境下,dplyr 包提供一套等价的表示,代码如下:
5.1.4 SQL
实际工作中,SQL (结构化查询语言)是必不可少的基础性工具,比如 SQLite、 Hive 和 Spark 等都提供基于 SQL 的数据查询引擎,没有重点介绍 SQL 操作是因为本书以 R 语言为数据分析的主要工具,而不是它不重要。以 dplyr 来说吧,它的诸多语义动词就是对标 SQL 的。
按 Species 分组统计数据条数, SQL 查询语句如下:
SQL 代码执行的结果如下:
dplyr 包能连接数据库,以上 SQL 代码也可以翻译成等价的 dplyr 语句。
# Source: SQL [3 x 2]
# Database: sqlite 3.41.2 [/usr/local/lib/R/library/RSQLite/db/datasets.sqlite]
# Groups: Species
Species n
<chr> <int>
1 setosa 50
2 versicolor 50
3 virginica 50
dplyr 包的函数 show_query()
可以将 dplyr 语句转化为查询语句,这有助于排错。
<SQL>
SELECT `Species`, COUNT(*) AS `n`
FROM `iris`
GROUP BY `Species`
glue 包可以使用 R 环境中的变量,相比于 sprintf()
函数,可以组合更大型的 SQL 语句,这在生产环境中广泛使用。
# R 环境中的变量
group <- "Species"
# 组合 SQL
query <- glue::glue("
SELECT COUNT(1) AS cnt, Species
FROM iris
GROUP BY ({group})
")
# 将 SQL 语句传递给数据库,执行 SQL 语句
DBI::dbGetQuery(conn, query)
cnt Species
1 50 setosa
2 50 versicolor
3 50 virginica
用完后,关闭连接通道。
更多关于 SQL 语句的使用介绍见书籍《Become a SELECT star》。
5.2 Base R 操作
介绍最核心的 Base R 数据操作,如筛选、排序、变换、聚合、重塑等
5.2.1 筛选
subset / [
5.2.2 变换
最常见的变换操作是类型转化,比如从字符串型转为因子型、整型或日期型等。
within/transform
5.2.3 排序
order
5.2.4 聚合
aggregate
5.2.5 合并
merge
5.2.6 重塑
reshape
分组 split / lapply / do.call / Reduce
5.3 data.table 操作
掌握此等基础性的工具,再去了解新工具也不难,更重要的是,只要将一种工具掌握的足够好,也就足以应付绝大多数的情况。
介绍 data.table 基础语法,对标 Base R,介绍基础操作,同时给出等价的 dplyr 实现,但不运行代码。
data.table 扩展 Base R 数据操作,介绍常用的操作 8 个,讲清楚出现的具体场景,同时给出等价的 dplyr 实现,但不运行代码。
data.table 特有的高级数据操作 on .SD .I .J 等。
5.3.1 筛选
[
5.3.2 变换
: