You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按2015年Rate降序分组排序R语言数据框?

解决按2015年Rate降序排列学校的dplyr方案

我来帮你搞定这个需求,用dplyr有两种实用方法,都能得到你想要的输出结果。

首先先还原你的数据集:

data2 <- structure(
  list(
    School = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), 
                      .Label = c("School1", "School2", "School3"), class = "factor"),
    Year = c(2015L, 2014L, 2013L, 2015L, 2014L, 2013L, 2015L, 2014L, 2013L),
    Rate = c(70L, 50L, 30L, 80L, 90L, 11L, 60L, 50L, 40L)
  ),
  .Names = c("School", "Year", "Rate"),
  class = "data.frame",
  row.names = c(NA, -9L)
)

方法一:先定义学校排序顺序,再转换为有序因子

这种方法逻辑清晰,先明确提取出想要的学校排序规则,再应用到原数据上:

library(dplyr)

# 第一步:获取按2015年Rate降序排列的学校列表
school_order <- data2 %>%
  filter(Year == 2015) %>%
  arrange(desc(Rate)) %>%
  pull(School)

# 第二步:将School转换为有序因子,按上述顺序排序,同时保证每个学校内年份从新到旧
sorted_data <- data2 %>%
  mutate(School = factor(School, levels = school_order, ordered = TRUE)) %>%
  arrange(School, desc(Year))

# 查看结果
sorted_data

运行后输出就是你预期的:

School Year Rate
1 School2 2015   80
2 School2 2014   90
3 School2 2013   11
4 School1 2015   70
5 School1 2014   50
6 School1 2013   30
7 School3 2015   60
8 School3 2014   50
9 School3 2013   40

步骤解释:

  • school_order:筛选出2015年的数据,按Rate降序排列后提取学校名称,得到School2 → School1 → School3的排序逻辑。
  • mutate:把原数据的School列转为有序因子,指定levels为刚才得到的顺序,这样后续排序会遵循这个规则,而不是因子默认的创建顺序。
  • arrange:先按School的有序顺序排序,再按Year降序,保证每个学校内的年份从新到旧排列。

方法二:链式计算临时排序键,直接排序

这种方法更简洁,不需要单独提取排序列表,通过添加临时列完成排序后再删除:

library(dplyr)

sorted_data <- data2 %>%
  # 为每个学校添加2015年的Rate作为排序键
  group_by(School) %>%
  mutate(rate_2015 = first(Rate[Year == 2015])) %>%
  ungroup() %>%
  # 按2015年Rate降序,再按年份降序排序
  arrange(desc(rate_2015), desc(Year)) %>%
  # 移除临时添加的排序键列
  select(-rate_2015)

# 查看结果
sorted_data

步骤解释:

  • group_by(School)后,mutate(rate_2015 = first(Rate[Year == 2015])):为每个学校的所有行添加2015年的Rate值作为临时排序依据。
  • ungroup()取消分组,确保后续的排序是全局生效的。
  • arrange:先按临时列rate_2015降序排列学校,再按Year降序排列每个学校内的行。
  • select(-rate_2015):删除临时列,得到干净的目标数据集。

两种方法都能完美实现你的需求,你可以根据自己的习惯选择使用。

内容的提问来源于stack exchange,提问作者Vikram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:39:32