R 语言数据科学(2022 版)

「R 语言数据科学」 系列课程将带领大家学习如何使用 R 语言进行数据处理、统计建模和图表绘制。该课程使用 Hadley Wickham 的 R for Data Science 作为参考资料并结合我们工作学习中的实际案例展开讲解,是入门 R 语言的不二之选。

与基础 R 语言不同,现代 R 语言的使用,特别是数据处理与可视化,主要是使用 tidyverse 系列的 R 包。tidyverse 系列的 R 包是指下面这些包:

tidyverse::tidyverse_packages()
#> [1] "broom" "cli" "crayon" "dbplyr"
#> [5] "dplyr" "forcats" "ggplot2" "haven"
#> [9] "hms" "httr" "jsonlite" "lubridate"
#> [13] "magrittr" "modelr" "pillar" "purrr"
#> [17] "readr" "readxl" "reprex" "rlang"
#> [21] "rstudioapi" "rvest" "stringr" "tibble"
#> [25] "tidyr" "xml2" "tidyverse"

这些包使用起来更加便捷,语法更加规范。例如你可以使用 readr 包读取数据、使用 tidyr 清理数据,使用 dplyr 操作数据,然后再使用 ggplot2 进行图表创作。下面这些示例可以让你一瞥 tidyverse 的美:

tibble

整洁的 tibble 数据框可以让你更好的审视你的数据:

as_tibble(iris)
#> # A tibble: 150 x 5
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> <dbl> <dbl> <dbl> <dbl> <fct>
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 4.9 3 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
#> 7 4.6 3.4 1.4 0.3 setosa
#> 8 5 3.4 1.5 0.2 setosa
#> 9 4.4 2.9 1.4 0.2 setosa
#> 10 4.9 3.1 1.5 0.1 setosa
#> # … with 140 more rows

ggplot2

使用 ggplot2 及其拓展包,你可以创建精美的统计图表:

# 加载 R 包
library(tidyverse)
library(ggridges)
library(scales)
library(hrbrthemes)
library(paletteer)

# 读取数据
read_csv('probly.csv') %>%
mutate(variable = factor(variable,
c("机会渺茫", "很不可能",
"毫无机会", "机会不大",
"不太确定", "不可能",
"不太可能", "值得怀疑",
"一半一半", "有点可能",
"可能", "值得确定", "很可能",
"大概率的可能", "非常有机会",
"极有可能", "几乎确定"))) -> probly

# 使用 ggplot2 绘图
ggplot(probly, aes(y = variable, x = value)) +
geom_density_ridges(scale = 4, aes(fill = variable), alpha = 3/4) +
scale_x_continuous(breaks = seq(0, 1, 0.1),
labels = percent_format(accuracy = 1)) +
guides(fill = F, color = F) +
labs(title = "定性概率描述的定量分布", x = "概率值分配", y = "") +
theme(plot.title = element_text(hjust = 0.5, size = 30)) +
scale_fill_paletteer_d("awtools::bpalette") +
theme_ipsum()

dplyr

使用 dplyr 你可以快捷的整理各种数据,例如:

有一个小伙伴提了个问题:他有 Q2 到 Q8 共 7 个变量。每个变量取值 1, 2, 3, 4。现在想把所有变量的 1 转成 100, 2 转成 80, 3 转成 60, 4 转成 0。显然这个问题可以使用 mutate_all 解决。

# 为了应用 dplyr 包的 mutate_all 函数,我们先定义一个替换函数:
replace_fun <- function(x){
case_when(
x == 1 ~ 100,
x == 2 ~ 80,
x == 3 ~ 60,
T ~ 0
)
}

# 然后我们造个类似的数据框然后应用 mutate_all 和上面定义的函数:

tibble(
Q2 = sample(1:4, 4),
Q3 = sample(1:4, 4),
Q4 = sample(1:4, 4),
Q5 = sample(1:4, 4),
Q6 = sample(1:4, 4),
Q7 = sample(1:4, 4),
Q8 = sample(1:4, 4)
) %>%
mutate_all(replace_fun)

#> # A tibble: 4 x 7
#> Q2 Q3 Q4 Q5 Q6 Q7 Q8
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 60 100 60 60 100 0 100
#> 2 0 0 0 0 0 60 80
#> 3 80 60 100 80 80 100 60
#> 4 100 80 80 100 60 80 0

# 或者使用 mutate 和 across 函数的组合:
tibble(
Q2 = sample(1:4, 4),
Q3 = sample(1:4, 4),
Q4 = sample(1:4, 4),
Q5 = sample(1:4, 4),
Q6 = sample(1:4, 4),
Q7 = sample(1:4, 4),
Q8 = sample(1:4, 4)
) %>%
mutate(across(everything(), ~replace_fun(.x)))

是不是觉得这些代码整洁又漂亮!篇幅有限就不再列举更多的示例了,快加入该系列课程学习吧!

点击这里跳转到 RStata 短书平台获取附件:R 语言数据科学(2022 版)

评论