Data Transformation
10.1 简介
通常情况下,除了整理数据之外,我们还需要把原始数据做一些数据变换(聚合等),这时就要使用到dplyr
包。
本章中我们学习dplyr
中四个重要的函数的用法:
filter()
mutate()
group_by()
summarise()
这些动词都是用相同的方式工作:将数据框作为第一个参数,然后返回一个修改后的数据框
本章中还会用到%>%
创建数据转换管道,%>%
和ggplot2中的+
有相似的作用。
10.2 过滤数据集(Filter Observations)
有时我们采用的数据分析策略是由小见大,从一个观测单位开始,然后将结论推广到整个数据集;
有时我们只想集中观测数据集中的一部分,这是就要取它的子集来分析;
有时我们就是想单独检查、剔除异常值;
这时可以使用filter()
函数,按给定的逻辑判断筛选出符合要求的子数据集。
拿钻石数据集来举个栗子:
> diamonds
# A tibble: 53,940 x 10
carat cut color clarity depth table price x y z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 0.230 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43
2 0.210 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31
3 0.230 Good E VS1 56.9 65.0 327 4.05 4.07 2.31
4 0.290 Premium I VS2 62.4 58.0 334 4.20 4.23 2.63
5 0.310 Good J SI2 63.3 58.0 335 4.34 4.35 2.75
6 0.240 Very Good J VVS2 62.8 57.0 336 3.94 3.96 2.48
7 0.240 Very Good I VVS1 62.3 57.0 336 3.95 3.98 2.47
8 0.260 Very Good H SI1 61.9 55.0 337 4.07 4.11 2.53
9 0.220 Fair E VS2 65.1 61.0 337 3.87 3.78 2.49
10 0.230 Very Good H VS1 59.4 61.0 338 4.00 4.05 2.39
# ... with 53,930 more rows
用变量x、y(钻石俯视图的长度、宽度)做二维热图:
ggplot(diamonds, aes(x, y)) +
geom_bin2d()
这个数据集中有50000+个数据点,大多集中在对角线上,但可以看到有一些异常点,我们可以使用filter()
函数来快速查找异常值:
> filter(diamonds, x == 0 | y == 0)
# A tibble: 8 x 10
carat cut color clarity depth table price x y z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 1.07 Ideal F SI2 61.6 56.0 4954 0 6.62 0
2 1.00 Very Good H VS2 63.3 53.0 5