如何用mutate将city转为factor并按code列指定水平顺序
解决方案
要实现按code列的顺序将city转为factor类型,同时不用手动指定levels,有两种简洁的实现方式:
方法1:使用forcats包的fct_reorder函数(推荐)
fct_reorder可以直接根据指定变量的顺序重新设置factor的levels,代码如下:
library(dplyr) library(forcats) df %>% mutate(city = fct_reorder(city, code))
- 该函数默认按
code的升序排列city的levels,若需要降序,可添加参数.desc = TRUE:df %>% mutate(city = fct_reorder(city, code, .desc = TRUE))
方法2:仅用dplyr实现
先按code排序,再将排序后的city列作为factor的levels:
library(dplyr) df %>% arrange(code) %>% mutate(city = factor(city, levels = .$city))
arrange(code)确保数据按code顺序排列,随后levels = .$city直接取排序后的city值作为factor的层级,无需手动输入。
内容的提问来源于stack exchange,提问作者uow
相关产品推荐
相关产品推荐

