按模式重新排序因子水平

标签 r forcats

我有一个因素可以识别调查数据集中的阶层。我想对因子重新排序,使某些字符模式出现在其他字符模式之前。

例如,我有一个指示性别、年龄和教育程度的混合因素:

my_factor <- factor(levels=c(1:8),
                    labels=c("Male-18_34-HS","Female-35_49-HS",
                             "Male-18_34-CG", "Female-18_34-CG",
                             "Male-35_49-HS", "Male-35_49-CG",
                             "Female-18_34-HS", "Female-35_49-CG"),
                    ordered=TRUE)

我希望首先对所有女性类别进行排序,然后按正确顺序排列年龄类别,然后按正确顺序排列教育类别。我可以通过 forcats::fct_relevel 完成大部分工作:

forcats::fct_relevel(my_factor, sort)

ordered(0)
8 Levels: Female-18_34-CG < Female-18_34-HS < Female-35_49-CG < Female-35_49-HS < Male-18_34-CG < Male-18_34-HS < ... < Male-35_49-HS

但是教育类别的顺序是错误的。有没有办法确保“HS”在“CG”之前,但保持性别和年龄组的顺序不变?

最佳答案

您可以通过编程方式创建所需的因子水平。

lvls <- do.call(paste, c(tidyr::expand_grid(
           c('Female', 'Male'), c('18_34', '35_49'), c('HS', 'CG')), sep = '-'))
lvls
#[1] "Female-18_34-HS" "Female-18_34-CG" "Female-35_49-HS" "Female-35_49-CG"
#[5] "Male-18_34-HS"   "Male-18_34-CG"   "Male-35_49-HS"   "Male-35_49-CG"

您可以将此 lvls 用作 factor 调用中的级别。

关于按模式重新排序因子水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67013442/

相关文章:

r - 在 R 中查找行名称

将多个因子的水平重新编码到指定范围

重新编码具有许多值(包括 NA)的数值变量

python - 相当于 pandas 中的 fct_lump

R 调试器不会在断点处停止

按两列排名并保持联系

Python 负二项式回归 - 结果与 R 中的结果不匹配

r - 在 dplyr 中有效地折叠、排序和删除因子

r - 如何将 fct_relevel 与 mutate_at 语法结合使用

r - R中重启、优化的累积和