抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

因子在 R 中用于处理分类变量。分类变量类似于 C/C++ 中的枚举类型,是在固定的已知集合中取值的变量。在 tidyverse 包中,用于处理因子的是 forcats 包。由于因子的类似枚举特性,因此也被称为分类变量

创建因子

可以使用 factor() 函数创建因子,其基本形式为 factor(x = character(), levels, labels = levels, exclude = NA, ordered = is.ordered(x), nmax = NA)levels 参数也被称为水平,当使用该函数对指定字符向量 x 构建因子却不指定水平时,该函数会将字符向量中的非重复元素构成的集合作为水平,并以 ordered 参数进行排序。当指定了水平时,字符向量 x 中不在水平集合内的所有值都会自动转换为 NA 。此外,还有着以下几个函数用来达成某些常见操作:

  • x %>% factor(levels = unique(x)) 可以生成与 x 顺序相同的因子
  • x %>% factor() %>% fct_inorder() 也可以生成与 x 顺序相同的因子
  • x %>% parse_factor(levels) 可以显示因子生成过程中的错误信息

因子水平计数

可以使用 count() 函数给因子水平计数,第一参数为数据表,第二参数为数据表中类型为因子的列。

因子水平修改

可以使用 fct_recode() 函数对已有的水平进行更改:

fct_recode()
1
2
3
4
5
6
7
> x <- factor(c("apple", "bear", "banana", "dear"))
> x
# [1] apple bear banana dear
# Levels: apple banana bear dear
> fct_recode(x, fruit = "apple", fruit = "banana")
# [1] fruit bear fruit dear
# Levels: fruit bear dear

使用该函数修改不存在的水平会给出相应的警告信息。

此外,还可以使用该函数的变体 fct_collapse() 函数来进行手动因子水平分组:

fct_collapse()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
> fct_count(gss_cat$partyid)
# # A tibble: 10 x 2
# f n
# <fct> <int>
# 1 No answer 154
# 2 Don't know 1
# 3 Other party 393
# 4 Strong republican 2314
# 5 Not str republican 3032
# 6 Ind,near rep 1791
# 7 Independent 4119
# 8 Ind,near dem 2499
# 9 Not str democrat 3690
# 10 Strong democrat 3490
> partyid2 <- fct_collapse(gss_cat$partyid,
missing = c("No answer", "Don't know"),
other = "Other party",
rep = c("Strong republican", "Not str republican"),
ind = c("Ind,near rep", "Independent", "Ind,near dem"),
dem = c("Not str democrat", "Strong democrat")
)
> fct_count(partyid2)
# # A tibble: 5 x 2
# f n
# <fct> <int>
# 1 missing 155
# 2 other 393
# 3 rep 5346
# 4 ind 8409
# 5 dem 7180

评论



This is a picture without description

This is a picture without description This is a picture without description This is a picture without description