R语言如何按另一列排序重排factor levels并保留同标签分组?
R base 实现factor取值替换并保留原有levels排序
核心实现代码
全程仅使用base R功能,无额外依赖,可直接嵌入函数适配任意factor标签输入,无需手动指定顺序:
# 示例数据 dat <- data.frame(trt = c('0_m', '0.2_m', '0.4_m', '0.6_m'), letter = factor(c("b", "c", "a", "b")), value = c(2, 3, 1, 2.1)) # 处理逻辑 # 提取letter列按行出现顺序的唯一取值 uniq_original <- unique(as.character(dat$letter)) # 提取原factor已排序的levels sorted_lvls <- sort(levels(dat$letter)) # 建立原唯一值到排序后levels的映射关系 lookup_map <- setNames(sorted_lvls, uniq_original) # 替换取值后重新转为factor,保留原有levels顺序 dat$letter <- factor(lookup_map[as.character(dat$letter)], levels = sorted_lvls)
输出结果
dat # trt letter value # 1 0_m a 2.0 # 2 0.2_m b 3.0 # 3 0.4_m c 1.0 # 4 0.6_m a 2.1
完全匹配需求中的预期输出,且factor列的levels保留原有的字母排序规则。
内容的提问来源于stack exchange,提问作者Sam Rogers
相关产品推荐
相关产品推荐

