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

R语言实现dataframe列最大值提取、对应值匹配及频次统计

R环境下tibble数据集两类统计需求实现方案

两个需求均可在R环境下直接实现,以下为可复用的代码方案,优先提供第一类汇总表的实现方法。

第一类需求:逐时间列返回最大值及对应人员姓名

实现逻辑:遍历所有24个格式为「月份_年份」的时间列(对应数据集列索引2-25),逐列计算最大值,匹配取到该值对应的Full.Name字段,最终合并为规整汇总表。

# 加载适配tibble处理的tidyverse工具包
library(tidyverse)

# 替换your_data为你实际的数据集变量名,可直接赋值dput读入的对象
your_data <- 

# 提取所有时间列的列名
time_columns <- colnames(your_data)[2:25]

# 生成汇总表
max_value_summary <- map_dfr(time_columns, function(current_col){
  # 计算当前列的最大值,自动忽略缺失值
  current_max <- max(your_data[[current_col]], na.rm = TRUE)
  # 匹配最大值对应的人员姓名,若存在并列最大值则用分号拼接多个姓名
  matched_names <- your_data %>%
    filter(.data[[current_col]] == current_max) %>%
    pull(Full.Name) %>%
    paste(collapse = "; ")
  
  # 返回单条统计结果
  tibble(
    时间列名 = current_col,
    列最大值 = current_max,
    最大值对应人员 = matched_names
  )
})

# 打印查看结果
print(max_value_summary)

注:若单个时间列存在多人同时取得最大值的情况,代码会自动拼接所有符合条件的人员姓名,不会遗漏结果。

第二类需求:统计每位人员取得列最大值的总次数

实现逻辑:先将宽格式数据集转为长格式,按每个时间列分组标记取得最大值的记录,再按人员维度聚合计数即可。

# 生成最大值次数统计结果
max_count_summary <- your_data %>%
  # 宽转长,把所有时间列整合为两列:时间维度名、对应数值
  pivot_longer(
    cols = all_of(time_columns),
    names_to = "时间列名",
    values_to = "指标值"
  ) %>%
  # 按单个时间列分组,标记当前组内的最大值记录
  group_by(时间列名) %>%
  mutate(is_max = as.integer(指标值 == max(指标值, na.rm = TRUE))) %>%
  ungroup() %>%
  # 按人员分组统计总次数
  group_by(Full.Name) %>%
  summarise(取得最大值总次数 = sum(is_max, na.rm = TRUE)) %>%
  # 按次数从高到低排序
  arrange(desc(取得最大值总次数))

# 打印查看结果
print(max_count_summary)

注:并列最大值场景下,所有取得最大值的人员都会累计1次计数,结果不会出现偏差。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:36:17