查看原文
其他

R语言处理因子之forcats包介绍(1)

阿越就是我 医学和生信笔记 2023-02-25



因子型变量在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):方差分析


R语言和医学统计学系列(3):卡方检验

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存