美文网首页
60.关于调整因子的属性levels的order(二)

60.关于调整因子的属性levels的order(二)

作者: 心惊梦醒 | 来源:发表于2021-09-17 22:13 被阅读0次

【上一篇:59.关于调整因子的属性levels的order(一)】
【下一篇:61.关于调整因子的属性levels的值】

    上篇讲到fct_reorder()和fct_reorder2()是根据另一个变量对因子进行排序,即Reorder factor levels by sorting along another variable。本篇讲fct_relevel()、fct_infreq()、fct_rev()。
    fct_relevel()可以实现手动调整levels的顺序,即Reorder factor levels by hand,你可以将任意数量的levels移动到任意位置。其Usage如下:

fct_relevel(.f, ..., after = 0L)
.f:因子
...:可以是一个或多个字符串,也可以是一个函数或者公式。如果是函数的话,将调用此函数处理.f,返回的值用来relevel
after:默认为0,表示将...放在所有levels的最前面;如果为Inf,表示放在所有levels的最后面;
  其他数字则表示对应的位置

    这个函数很好用的,也很容易记忆,给点个赞。
    举个应用的例子如下:

# 年龄和收入的关系
rincome_summary <- gss_cat %>%
  group_by(rincome) %>%
  summarise(
    age = mean(age, na.rm = TRUE),
    tvhours = mean(tvhours, na.rm = TRUE),
    n = n()
  )
 p1<-ggplot(rincome_summary, aes(age, rincome)) + geom_point()
 p2<-ggplot(rincome_summary, aes(age, fct_relevel(rincome,"Not applicable"))) + geom_point()
 ggarrange(p1,p2)
手动调整levels的顺序

    图片的x轴和y轴上都有默认的levels:变量不是因子类型的时候,默认按照ASCII码的顺序定义levels,所以有时候你会看到横坐标排序是1、11、12、2、3......;变量是因子类型的时候,则按照因子的levels展示图片,例如上右图,rincome是因子,默认的levels是(记忆:横纵坐标上分类变量的顺序是从坐标原点出发的levels的顺序,即横坐标是从左到右,纵坐标是从下到上):

> levels(gss_cat$rincome)
 [1] "No answer"      "Don't know"     "Refused"        "$25000 or more"
 [5] "$20000 - 24999" "$15000 - 19999" "$10000 - 14999" "$8000 to 9999" 
 [9] "$7000 to 7999"  "$6000 to 6999"  "$5000 to 5999"  "$4000 to 4999" 
[13] "$3000 to 3999"  "$1000 to 2999"  "Lt $1000"       "Not applicable"

    使用fct_relevel()将Not applicable放在最前面让图形(上右图)更符合人的习惯。
    fct_revel()使用的几种示例如下:

f <- factor(c("a", "b", "c", "d"), levels = c("b", "c", "d", "a"))
# 将b和a放在最前面
fct_relevel(f, "b", "a")
# 将a放在第2个位置后面,即第三个位置
fct_relevel(f, "a", after = 2)
# 将a放在最后面
fct_relevel(f, "a", after = Inf)
# 用函数进行relevel
fct_relevel(f, sort)  #按照sort排序的结果relevel
fct_relevel(f, sample)  #按照任意抽样的结果relevel
fct_relevel(f, rev)  #按照反向排序的结果relevel

    fct_infreq()和fct_rev()也是两个极其简单但棒呆了的排序函数。
    fct_inorder()(前面提到过)、fct_infreq()和fct_inseq()是一个家族的,并称Reorder factor levels by first appearance, frequency, or numeric order,其Usage如下:

# 按第一次出现的顺序
fct_inorder(f, ordered = NA)
# 按观测值的数量(最大的在最前面,即降序)
fct_infreq(f, ordered = NA)
# 按levels的数字值排序--暂时想不到意义何在
fct_inseq(f, ordered = NA)

    fct_rev()就更简单了:Reverse order of factor levels

# 反向排序 :简直不要爽歪歪
fct_rev(f)

【上一篇:59.关于调整因子的属性levels的order(一)】
【下一篇:61.关于调整因子的属性levels的值】

相关文章

网友评论

      本文标题:60.关于调整因子的属性levels的order(二)

      本文链接:https://www.haomeiwen.com/subject/xqmsgltx.html