首页 > 解决方案 > 如何使用带管道的混合排序重新调平?

问题描述

如何在同一管道中使用 dplyr 和混合排序重新调整因子?

df %>%
     relevel(.$var, mixedsort(levels(.$var)))

即使 var 是一个因素,也会导致错误消息“'relevel' only for (unordered) factors”。我也尝试过使用 magrittr 管道,relevel(var, mixedsort(levels(var)))但无济于事。

我想这可以通过保存混合排序(levels(var))然后从 relevel 函数中调用它来完成,但如果可能的话,我想在一个 relevel 调用中完成所有操作。

标签: rdplyr

解决方案


我们可以用 包装{},但是,relevel ref只需要一个元素

library(dplyr)
library(gtools)
iris %>% 
     {relevel(.$Species, mixedsort(levels(.$Species))[1])}

或更改级别的顺序,应用factor

iris %>%
     {factor(.$Species, levels = mixedsort(levels(.$Species)))}

如果我们想重新排序,另一种选择是fct_relevel

library(forcats)
iris %>%
    {fct_relevel(.$Species, mixedsort(levels(.$Species)))}

或者当我们使用dplyr时,在mutateor中执行transmute,然后pulltransmute如果只需要一个列然后想要pull作为`向量)

iris %>%
   transmute(Species = factor(Species, levels = mixedsort(levels(Species)))) %>%
   pull(Species)

如果我们需要完整的列集,请使用mutate

iris1 <- iris %>%
   mutate(Species = factor(Species, levels = mixedsort(levels(Species))))

推荐阅读