1 Star 7 Fork 1

zhongyf / Rbook

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
05-forcats.Rmd 5.78 KB
一键复制 编辑 原始数据 按行查看 历史
zhongyf 提交于 2021-06-21 18:30 . commit
# 因子介绍{#forcats} 我在实际工作中因子数据类型使用较少,forcats软件包用来处理因子,该软件包是tidyverse的一部分。 因子是用于对数据进行分类的R的一种数据类型。 它们可以存储字符串和整数.它们在具有有限数量的唯一值的列中很有用. 像“男性”,“女性”和True,False等。 本章节简单了解即可。 ## 介绍{#forcats:introduction} 在 R 中 使用『因子[^factor]』处理具有固定已知的种类的变量,因子有助于字符向量重新排序获得较好的展示效果。 `forcats`包提供了一套工具,解决常见『因子』问题,包括更改级别以及值的顺序。 [^factor]: R 中内置的一种数据结构,与向量,列表类似。 `forcats` 常用函数: - `fct_reorder()`: 按照另一个变量重新排列因子 - `fct_infreq()`:按值得频率重新排列一个因素 - `fct_relevel()`: 手动指定因子的顺序 - `fct_lump()`:将一个因素的最少/最频繁的值折叠成其他 关于`forcats`包,可以直接阅读 R for Data Science 的[因子章节](https://r4ds.had.co.nz/factors.html)。本文大部分内容是从官方手册直译,案例照搬。 因子变量会占用更小内存空间,如下: ```{r } object.size(rep(letters,100000)) object.size(rep(forcats::as_factor(letters),100000)) ``` > R-4.0 之后改变了字符默认为因子的方式 ### 安装{#forcats:install} 由于`forcats`是tidyverse系列的核心包,可以直接安装tidyverse。 ```{r eval=FALSE} install.packages("tidyverse") # 从cran 安装 install.packages("forcats") # 安装开发版 devtools::install_github("tidyverse/forcats") ``` 由于`forcats`包功能相对简单,本章节接下来仅介绍常用函数用法 ## 用法{#forcats:usage} 主要介绍`fct_reorder()`,`fct_infreq()`,`fct_relevel()`等函数用法。 ### 创建因子 使用 base R 中 `factor`函数创建因子。 ```{r} x1 % factor() %>% fct_inorder() ``` ### 修改因子顺序 在我们作图时更改因子级别的顺序往往很有用,如下所示: ```{r} library(tidyverse) relig_summary % group_by(relig) %>% summarise( age = mean(age, na.rm = TRUE), tvhours = mean(tvhours, na.rm = TRUE), n = n() ) ggplot(relig_summary, aes(tvhours, relig)) + geom_point() ``` > gss_cat 是 forcats 包自带数据集,展示的是宗教间每天看电视的平均小时数 根据绘制的图像,我们很难有效解释,因为图表是杂乱无序的。我们通过`fct_reorder()`重新指定因子水平使图表表达更加清晰。 ```{r} ggplot(relig_summary, aes(tvhours, fct_reorder(relig, tvhours))) + geom_point() ``` `fct_reorder()`三个参数: - .f:你想要调整因子水平的因子或者是字符向量 - .x:指定因子的水平 - .fun:可选的,当一个x对应多个f时的聚合函数,默认是`median` ```{r} df % group_by(rincome) %>% summarise( age = mean(age, na.rm = TRUE), tvhours = mean(tvhours, na.rm = TRUE), n = n() ) ggplot(rincome_summary, aes(age, fct_reorder(rincome, age))) + geom_point() ``` 如果我们像之前一样更改收入的因子水平,但这并不是一个好的决定,因为收入在一般意义上已经有了顺序。但是,如果我们修改特殊的因子水平还是有意义的,如下: ```{r} ggplot(rincome_summary, aes(age, fct_relevel(rincome, "Not applicable"))) + geom_point() ``` `fct_relevel()`用法: ```{r} f % mutate(marital = marital %>% fct_infreq() %>% fct_rev()) %>% ggplot(aes(marital)) + geom_bar() ``` 该系列函数功能是改变因子水平。 - `fct_inorder()`: 以第一次出现的顺序为顺序 - `fct_infreq()`:以每个因子出现的次数为顺序,数字大在前 - `fct_inseq()`:以级别的数字为顺序 ```{r} f % mutate(partyid = fct_recode(partyid, "Republican, strong" = "Strong republican", "Republican, weak" = "Not str republican", "Independent, near rep" = "Ind,near rep", "Independent, near dem" = "Ind,near dem", "Democrat, weak" = "Not str democrat", "Democrat, strong" = "Strong democrat" )) %>% count(partyid) ``` `fct_recode()`用法: ```{r} x
R
1
https://gitee.com/zhongyufei/Rbook.git
git@gitee.com:zhongyufei/Rbook.git
zhongyufei
Rbook
Rbook
master

搜索帮助