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

R语言DataFrame排序求助:按Freq排序且重复Var聚合显示

解决方案:按分组最高频次排序并聚合重复变量

没问题,这个需求其实很好实现——核心是先给每个Var标记它对应的最高Freq,再基于这个标记值和原始Freq做双层排序即可。我给你两种常用的R语言实现方式:

方法1:使用dplyr(tidyverse生态,代码更直观)

首先构造你的示例数据:

df <- data.frame(
  Var = c("A", "C", "B", "D", "E", "A", "B", "A"),
  Freq = c(10, 11, 8, 7, 6, 5, 1, 3)
)

然后通过分组计算最高频次、排序来实现需求:

library(dplyr)

df_sorted <- df %>%
  # 按Var分组,计算每个组的最高Freq
  group_by(Var) %>%
  mutate(max_group_freq = max(Freq)) %>%
  ungroup() %>%
  # 第一排序键:组最高Freq降序;第二排序键:当前行Freq降序
  arrange(desc(max_group_freq), desc(Freq)) %>%
  # 移除临时生成的max_group_freq列
  select(-max_group_freq)

print(df_sorted)

运行后输出结果完全符合你的期望:

# A tibble: 8 × 2
  Var   Freq
  <chr> <dbl>
1 C        11
2 A        10
3 A         5
4 A         3
5 B         8
6 B         1
7 D         7
8 E         6

方法2:使用Base R(无需额外安装包)

如果不想加载第三方库,用Base R也能完成:

# 先计算每个Var对应的最高Freq
var_max_freqs <- tapply(df$Freq, df$Var, max)
# 给原数据框添加最高频次的标记列
df$max_group_freq <- var_max_freqs[df$Var]
# 按标记列降序、原始Freq降序排序
df_sorted_base <- df[order(-df$max_group_freq, -df$Freq), ]
# 删除临时标记列
df_sorted_base$max_group_freq <- NULL

print(df_sorted_base)

核心思路说明

我们的目标是先按每个Var的最高Freq排序组,组内再按自身Freq降序排序:

  1. 先为每一行标记它所属Var的最高Freq值,作为组排序的依据
  2. 用双层排序:第一层按组最高Freq降序,确保高频次的Var组排在前面;第二层按当前行Freq降序,确保组内的行从高到低排列
  3. 最后移除临时标记列,得到干净的结果

内容的提问来源于stack exchange,提问作者Xiao-yan Pan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:17:53