接触到R数据类型的人都知道,因子是一种重要的数据类型,主要用于数据分组,即在分类变量出现时,这时候一般都以因子形式保存。
在基础函数中,关于factor变量的主要函数有:
- factor() 创建因子变量
- levels() 提取因子变量levels
例如如下操作
> rm(list=ls())
> gender_code <- c(1,0,0,1,1,1,0)
> gender <- factor(gender_code, levels = c(1,0), labels = c( "男","女"))
> gender
[1] 男 女 女 男 男 男 女
Levels: 男 女
> levels(gender)
[1] "男" "女"
下面主要针对fct_reorder()
函数的介绍,顺便介绍一下forcats
包的使用。目前,forcats
包已经被tidyverse
包集成了,当我们加载tidyverse
包的时候,就可以看到里面集成了forcats
包。我们使用的数据集是forcats
自带的数据集gss_cat
library(tidyverse)
> library(tidyverse)
── Attaching packages ──────────────────────────── tidyverse 1.3.0 ──
✓ ggplot2 3.3.0 ✓ purrr 0.3.4
✓ tibble 3.0.3 ✓ dplyr 0.8.5
✓ tidyr 1.1.0 ✓ stringr 1.4.0
✓ readr 1.3.1 ✓ forcats 0.5.0
── Conflicts ─────────────────────────────── tidyverse_conflicts() ──
x dplyr::filter() masks stats::filter()
x dplyr::lag() masks stats::lag()
我们先看一下gss_cat数据的概况:
> head(gss_cat)
# A tibble: 6 x 9
year marital age race rincome partyid relig denom tvhours
<int> <fct> <int> <fct> <fct> <fct> <fct> <fct> <int>
1 2000 Never married 26 White $8000 to 9999 Ind,near rep Protestant Southern baptist 12
2 2000 Divorced 48 White $8000 to 9999 Not str republican Protestant Baptist-dk which NA
3 2000 Widowed 67 White Not applicable Independent Protestant No denomination 2
4 2000 Never married 39 White Not applicable Ind,near rep Orthodox-christian Not applicable 4
5 2000 Divorced 25 White Not applicable Not str democrat None Not applicable 1
6 2000 Married 25 White $20000 - 24999 Strong democrat Protestant Southern baptist NA
我们可以看到第二列marital(婚姻状况是一个category virable,分类变量),现在我们想统计一下每种婚姻类型的总数。
> gss_cat %>%
+ count(marital)
# A tibble: 6 x 2
marital n
<fct> <int>
1 No answer 17
2 Never married 5416
3 Separated 743
4 Divorced 3383
5 Widowed 1807
6 Married 10117
现在我们想通过bar chart来展示每种婚姻状况类型的多少。
library(ggplot2)
gss_cat %>%
count(marital) %>%
ggplot(aes(marital, n)) +
geom_col()
每种婚姻类型的bar chart
如果我们想要得到按照柱长按从小到大排列的barchart, 我们就要对因子进行排序,这时候就要用fct_reorder()
函数了。
library(ggplot2)
gss_cat %>%
count(marital) %>%
mutate(marital=fct_reorder(marital,n)) %>%
ggplot(aes(marital, n)) +
geom_col()
每种婚姻类型的bar chart, 按照数值大小排列
网友评论