R语言如何将character类型变量转换为指定顺序的factor类型?
可以直接使用tidyverse中forcats包的fct_reorder()函数实现需求,代码更简洁,也不需要硬编码数字范围、提前排序整个数据框:
library(tidyverse) raw_data <- data.frame( period=c('Q2','Q1','8','7','40','41'), amount=c(1:6) ) # 仅调整period为指定顺序的因子,不改变数据框原有行序 result <- raw_data %>% mutate(period = fct_reorder(period, parse_number(period))) # 查看因子水平,确认顺序符合要求 levels(result$period) # 输出:"Q1" "Q2" "7" "8" "40" "41"
如果同时需要让整个数据框按period的数字顺序排列,可以追加arrange()步骤:
arranged_result <- raw_data %>% mutate(period = fct_reorder(period, parse_number(period))) %>% arrange(period)
说明
fct_reorder()的第一个参数传入要处理的period向量,第二个参数传入用来排序的依据向量,这里直接用parse_number(period)提取的数字作为排序依据,自动完成因子转换和水平重排- 不需要像原有代码一样硬编码
1:41的范围,后续period里的数字范围变化也无需修改代码,扩展性更强
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

