其他
R语言处理因子之forcats包介绍(1)
因子型变量在R语言中占有重要位置,自带的factor()
函数可帮助我们简单的处理因子型数据,但是forcats
包无疑是处理因子的首选R包,作为tidyverse
风格的成员,forcats
包含有超多实用的函数,将通过多篇推文详细介绍forcats
包的所有函数。
R语言forcats
包简介
今日学习处理因子变量的专用包forcats
,可通过以下方式安装:
install.packages("tidyverse")
install.packages("forcats")
devtools::install_github("tidyverse/forcats")
因子变量又被称为分类变量,它和普通的字符型变量不同,它包含一定的顺序,并且可以更改,对于统计建模、数据可视化等都非常重要。
先来一个简单的例子介绍下因子的作用。
假设我们要创建一个月份的变量,并按照月份的顺序进行排序,
library(tidyverse)
## -- Attaching packages ----------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5 v purrr 0.3.4
## v tibble 3.1.6 v dplyr 1.0.7
## v tidyr 1.1.4 v stringr 1.4.0
## v readr 2.1.1 v forcats 0.5.1
## -- Conflicts -------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(forcats)
months <- c("Dec","Apr","Jan","Mar")
这时使用sort
对它进行排序并不能出现我们想要的结果:
sort(months)
## [1] "Apr" "Dec" "Jan" "Mar"
我们可以通过将变量因子化,来解决这个问题:
## 首先创建我们想要的顺序,然后让变量遵从这个顺序
month_levels <- c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")
months1 <- factor(months, levels = month_levels)
months1
## [1] Dec Apr Jan Mar
## Levels: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
这样就能解决排序的问题了,另外还能解决你的拼写错误问题,它会把不在你顺序中的值变成NA
。
x1 <- c("Apr","Mar","Jan","Dee")
factor(x1, levels = month_levels)
## [1] Apr Mar Jan <NA>
## Levels: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
如果你的向量的顺序就是你想要的顺序,可以使用以下代码:
factor(months, levels = unique(months))
## [1] Dec Apr Jan Mar
## Levels: Dec Apr Jan Mar
months %>% factor() %>% fct_inorder()
## [1] Dec Apr Jan Mar
## Levels: Dec Apr Jan Mar
forcats
包所有函数
根据forcats
包官网介绍,这个包的函数主要分为6类(其实是5类,再加一个数据集):
1. 修改因子向量顺序
保持因子的值不变,但改变它们的顺序。对建模、表和可视化特别有用
fct_relevel()
:手动调整顺序fct_inorder()/fct_infreq()/fct_inseq()
:根据第一次出现的顺序、出现的频率多少、数字顺序进行排序fct_reorder()/fct_recorder2()/last2()/first2()
:根据另外一个变量的值调整顺序fct_shuffle()
:随机重新排列fct_rev()
:反转因子水平fct_shift()
:将因子向左或右移动
2. 修改因子向量名称
改变因子的值,同时保持原来的顺序(尽可能)
fct_anon()
:按照因素水平fct_collapse()
:将因子水平折叠成手动定义的组fct_lump()/fct_lump_min()/fct_lump_prop()/fct_lump_n()/fct_lump_lowfreq()
:将出现次数较少的合并为“其他”fct_other()
:将指定的因子水平设置为“其他”fct_recode()
:手动改变因子的值fct_relabel()
:自动重新标记因子水平,必要时折叠
3. 增加/删除因子
fct_expand()
:fct_explicit_na()
:使缺失值显式显示fct_drop()
:fct_unify()
:
4. 合并多个因子
fct_c()
:fct_cross()
:
5.其他
as_factor()
:fct_count()
:fct_match()
:fct_unique()
:lvls_reorder()/lvls_revalue()/lvls_expand()
:lvls_union()
:
6. 一个数据集
gss_cat
今天主要介绍此包的主要内容,接下来的推文会详细介绍每一个函数,欢迎大家点赞、在看、评论。
欢迎关注我的公众号:医学和生信笔记
“医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!
往期精彩内容:
R语言和医学统计学系列(1):t检验
R语言和医学统计学系列(2):方差分析