查看原文
其他

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

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


今天继续学习forcats包的内容,这是forcats包介绍系列的第4篇。

增加/删除因子

3.1 fct_expand()

增加因子水平

f <- factor(sample(letters[1:3], 20, replace = TRUE))
f
##  [1] c b b a a a b a b b b a a c a c a a a b
## Levels: a b c

fct_expand(f, "d""e""f")
##  [1] c b b a a a b a b b b a a c a c a a a b
## Levels: a b c d e f

3.2 fct_drop()

删除没用的因子水平

f <- factor(c("a""b"), levels = c("a""b""c"))
f
## [1] a b
## Levels: a b c

fct_drop(f, "c")
## [1] a b
## Levels: a b

3.3 fct_explicit_na()

NA 一个水平,确保画图或汇总的时候能用上

f1 <- factor(c("a""a"NANA"a""b"NA"c""a""c""b"))
fct_count(f1)
## # A tibble: 4 x 2
##   f         n
##   <fct> <int>
## 1 a         4
## 2 b         2
## 3 c         2
## 4 <NA>      3
f2 <- fct_explicit_na(f1, na_level = "missing")
fct_count(f2)
## # A tibble: 4 x 2
##   f           n
##   <fct>   <int>
## 1 a           4
## 2 b           2
## 3 c           2
## 4 missing     3

3.4 fct_unify()

这个函数是作用于列表的,用于统一列表内的因子水平

fs <- list(factor("a"), 
           factor("b"), 
           factor(c("a""b")))

fct_unify(fs, levels = c("a""b""c"))
## [[1]]
## [1] a
## Levels: a b c
## 
## [[2]]
## [1] b
## Levels: a b c
## 
## [[3]]
## [1] a b
## Levels: a b c

4.1 fct_c()

拼接因子向量

fa <- factor("a")
fb <- factor("b")
fab <- factor(c("a""b"))

c(fa, fb, fab)
## [1] a b a b
## Levels: a b

fct_c(fa, fb, fab)
## [1] a b a b
## Levels: a b

4.2 fct_cross()

组合因子向量,形成新的因子向量,不是简单的连在一起

fruit <- factor(c("apple""kiwi""apple""apple"))
colour <- factor(c("green""green""red""green"))
eaten <- c("yes""no""yes""no")

fct_cross(fruit, colour)
## [1] apple:green kiwi:green  apple:red   apple:green
## Levels: apple:green kiwi:green apple:red

fct_cross(fruit, colour, eaten)
## [1] apple:green:yes kiwi:green:no   apple:red:yes   apple:green:no 
## Levels: apple:green:no kiwi:green:no apple:green:yes apple:red:yes

5.1 as_factor()

变成因子向量,和 as.factor() 作用一样,但略有不同

x <- c("a""z""g")
as.factor(x) # 会改变顺序
## [1] a z g
## Levels: a g z
as_factor(x) # 还是按照原来的顺序
## [1] a z g
## Levels: a z g

5.2 fct_count()

统计因子个数

f <- factor(sample(letters)[rpois(100010)])
table(f)
## f
##   a   b   d   e   g   h   i   j   k   l   m   n   o   q   r   t   u   v   x   y 
##  13   2  17   1  13  47  10   1 106  28 132  21  97  51  99  43   3 128   1  63 
##   z 
## 124
fct_count(f, sort = T, prop = T# 计算个数,按顺序排列,并计算比例
## # A tibble: 21 x 3
##    f         n     p
##    <fct> <int> <dbl>
##  1 m       132 0.132
##  2 v       128 0.128
##  3 z       124 0.124
##  4 k       106 0.106
##  5 r        99 0.099
##  6 o        97 0.097
##  7 y        63 0.063
##  8 q        51 0.051
##  9 h        47 0.047
## 10 t        43 0.043
## # ... with 11 more rows

5.3 fct_match()

检查是否存在某个因子

table(fct_match(gss_cat$marital, c("Married""Divorced")))
## 
## FALSE  TRUE 
##  7983 13500

5.4 fct_unique()

每个水平只保留一个因子

f <- factor(letters[rpois(10010)])
unique(f)
##  [1] i o j n p l k h q e f a m d g b
## Levels: a b d e f g h i j k l m n o p q

fct_unique(f)
##  [1] a b d e f g h i j k l m n o p q
## Levels: a b d e f g h i j k l m n o p q

5.5 lvls_reorder()

f <- factor(c("a""b""c"))

lvls_reorder(f, 3:1)
## [1] a b c
## Levels: c b a

lvls_revalue(f, c("apple""banana""carrot"))
## [1] apple  banana carrot
## Levels: apple banana carrot

lvls_expand(f, c("a""b""c""d"))
## [1] a b c
## Levels: a b c d

5.6 lvls_union()

作用于列表

fs <- list(factor("a"), factor("b"), factor(c("a""b")))
lvls_union(fs)
## [1] "a" "b"

以上就是forcats包的全部内容,希望大家都能学会,如果有问题,欢迎交流讨论。

以上就是今天的内容,希望对你有帮助哦!欢迎点赞、关注、转发

有任何问题欢迎评论区留言或直接添加我的微信!




欢迎关注我的公众号:医学和生信笔记

医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!


往期精彩内容:

超详细的R语言热图之complexheatmap系列1


超详细的R语言热图之complexheatmap系列2


超详细的R语言热图之complexheatmap系列3


在VScode中使用R语言


R语言生信图表学习之网络图


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

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