#R的学习笔记06
title: "R的学习笔记04"
author: "ks_c"
date: "2021/2/2"
output: html_document
<font face="宋体">以下为R数据分析指南与速查手册 第四章的内容</font>
tidyverse包做探索性数据分析
- 数据变化
1 filter
2 select
3 arrange - 多表融合
- 增加新列
1 mutate
2 mutate与group_by
3 mutate_all
4 mutate_at
5 mutate_if - 数据汇总
1 summarise与group_by
2 summarise_all
3 summarise_at
4 summarise_if - 函数复用
- 可视化
1. 数据变换总结
- 行去重:distinct(.data, …, .keep_all = FALSE)
- 行筛选:filter()
- 列筛选:select()
- 行排序:arrange()
- 长转宽:spread(data, key=键所在列, value=键值所在列)
- 宽转长:gather(data, 需要转换的各列, key = “新建的键名”, value = “新建的键值名”)
- 列合并:unite(data, col=新列, 需要合并的各列, sep = "_", remove = TRUE)
- 列分裂:separate(data, col, into=c(“列1”,“列2”,…), sep = “[^[:alnum:]]+”)
- 嵌套与取消嵌套:nest()、unnest()
1.1 filter
filter进行行筛选,各逗号分隔的条件需同时满足,常用筛选条件有:
>, >=, <, <=, !=(不等于) , == ,near() , is.na(), %in%(前者是否在后者里面,返回值为T/F), between(x, left, right)
由于可能存在舍入误差,浮点数最好不用 == 而用near。
&, |, !, xor()(异或)
1.2 select
进行列筛选,各逗号分隔的条件任满足其一即可,常用辅助筛选函数有:
:(从a列到b列), - (除了这些列)
starts_with()、ends_with()、contains()、matches()、num_range()、one_of()、everything()、last_col()
1.3 arrange
对行进行排序,可以有多个排序条件,
降序:desc()
2. 多表融合总结
将两个或多个表,通过共同的列联结起来,常见的操作包括:
- 左联结:left_join(x, y, by = NULL)
- 右联结:right_join(x, y, by = NULL)
- 内联结:inner_join(x, y, by = NULL)
- 全联结:full_join(x, y, by = NULL)
- 半联结:semi_join(x, y, by = NULL)
- 反联结:anti_join(x, y, by = NULL)
- 多个表的联结:list(x1, x2, x3,…) %>% reduce(····_join, by = NULL)
将具有相同列的两个表或多个表,对行进行集合操作
- intersect(x, y, …)
- union(x, y, …)
- union_all(x, y, …)
- setdiff(x, y, …)
- setequal(x, y, …)
- list(x1, x2, x3,…) %>% reduce(*_join, by = NULL)
3. 增加新列总结
对原有的列进行运算,得到长度与数据行数相同的新列。
分组与取消分组:group_by()、ungroup()
-
增加新列:
- mutate()
- mutate_all(.tbl, .funs, …)
- mutate_at(.tbl, .vars, .funs, …)
- mutate_if(.tbl, .predicate, .funs, …)
-
仅保留新列:
- transmute()
- transmute_all()
- transmute_at()
- transmute_if()
4. 数据汇总总结
分组对列进行统计汇总,统计汇总函数一般含一个数据参数,这个参数为代表多个观测的向量,返回单个数值。当返回多个值时,可以将其转换为list.
数据汇总(一般会与分组结合):
summarise()
summarise_all(.tbl, .funs, …)
summarise_if(.tbl, .predicate, .funs, …)
summarise_at(.tbl, .vars, .funs, …, .cols = NULL)
所有列采用相同汇总函数时也可用map()、map_*(),但其无法和group_by结合
对summarise系列函数,若返回长度大于1的向量,可用list将结果包围。
5. 函数复用总结
单变量
返回列表:map(.x, .f, …)
返回 * 类型的向量:map_(.x, .f, …)( 可以是lgl、chr、int、dbl、raw)
得到输出、打印、保存等其他动作:walk()
返回数据框:map_dfc(.x, .f, …), map_dfr(.x, .f, …, .id = NULL)
条件筛选,返回列表:map_if(.x, .p, .f, …, .else = NULL)、map_at(.x, .at, .f, …)
2维变量:map2(.x, .y, .f, …)、map2_(.x, .y, .f, …)等(没有if和at)
p维变量:pmap(.l, .f, …)、pmap_(.x, .y, .f, …)等(没有if和at)
递归复用:map_depth(.x, .depth, .f, …, .ragged = FALSE)
6. 可视化总结
ggplot图层:
ggplot(data = <DATA>) +
<GEOM_FUNCTION>(
mapping = aes(<MAPPINGS>),
stat = <STAT>,
position = <POSITION>
) +
<COORDINATE_FUNCTION> +
<FACET_FUNCTION> +
<SCALE_FUNCTION> +
<THEME_FUNCTION>
GEOM_FUNCTION
离散变量频次:geom_bar
连续变量频次:geom_histogram、geom_freqpoly、 geom_density
离散vs连续:geom_boxplot、geom_violin、并排geom_histogram
离散vs离散:geom_tile(热力图,颜色深浅表示频次),geom_count(点的大小表示频次)、并排geom_bar
连续vs连续:geom_point、geom_bin2d(方形封箱)、geom_hex(6边形封箱)、geom_smooth、geom_line、geom_density2d
3变量: geom_contour(aes(z = z))、geom_tile(aes(fill = z))、geom_raster(aes(fill = z))
MAPPINGS
x、y轴:x、y
点或边框的颜色:color (颜色字符串)
填充颜色:fill (颜色字符串)
形状:shape(最多6种,代表形状的数字)
点的大小、线的粗细:size (毫米为单位的数字)
透明度:alpha
线型:linetype(整数或字符串: 0 = blank, 1 = solid, 2 = dashed, 3 = dotted, 4 = dotdash, 5 = longdash, 6 = twodash)
边框粗细:stoke
group
STAT
“count”
“bin”
“identity”
“boxplot”
POSITION
“stack”:堆积
“identity”:独立重叠
“dodge”:侧面并列
“fill”:堆积归一
“jitter”:扰动
“dodge2”
COORDINATE_FUNCTION
coord_flip:坐标翻转
coord_fixed(ratio = 1/2):固定坐标比例
coord_polar:极坐标
coord_cartesian:笛卡尔坐标(默认,可修改坐标范围)coord_cartesian(xlim = c(0, 5))
FACET_FUNCTION
单变量分面:facet_wrap
双变量分面:facet_grid