【上一篇: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)

图片的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的值】
网友评论