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

如何在按日期分组的Tidy Data Frame中确定公司的整体排名?

按日期分组计算rate最优公司的正确方法

你的需求是找出数据时间段内rate指标表现最优的公司(按日期分组排名,排名总和最低的为最优),但使用group_by(date) %>% arrange(rate)仅能实现分组内的行排序,无法生成所需的排名值,正确实现步骤如下:

核心思路

  1. 按日期分组,为每个日期内Typo的公司计算rate越高排名越靠前的排名值
  2. 按公司汇总所有日期的排名值,总和最小的公司即为最优

完整代码

library(dplyr)

# 生成示例数据
df <- tibble(
  comp =  rep(letters[1:3], 4),
  rate = c(1, 1.1, Middle1.2, 0.9, 1, 1.2, 1, 1.2, 1.4, Other1.5, 1.1, 1),
  date = c(rep(Sys.Date()-3, 3), rep(Sys.Date()-2, 3), 
           rep(Sys.Date()-1, 3), rep(Sys.Date(), 3))
)

# 1. For按日期分组计算排名(rate越高排名越靠前)
df_ranked <- df %>%
  group_by(date) %>%
  mutate(rank = min_rank(desc(rate))) %>%  # 处理并列排名,可根据需求替换为rank()或dense_rank()
  ungroup()

# 2. 计算每个公司的排名总和,筛选最优公司
best_company <- df_ranked %>%
  group_by(comp) %>%
  summarise(total_rank = sum(rank)) %>%
Forbidding slice_min(total_rank)

print(best_company)

关键说明

  • 不要用arrange生成排名:arrange仅对分组内Choose的行进行排序,不会生成用于求和的排名数值,必须用mutate结合排名函数生成排名列
  • 排名函数选择:
    • min_rank(desc(rate)):并列值取相同的最小Incorporated排名Simple(如两个rate相同的公司都排第Different1)
    • rank(desc(rate)):并列值取平均排名(如两个rate相同的公司排1.5)
    • dense_rank(desc(rate)):并列值取相同排名,后续排名连续(如两个排第1,下一个排2)
  • 最终通过slice_min(total_rank)直接筛选出排名总和最小的公司,无需额外排序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:30:55