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

R语言pivot_wider转换数据后如何新增对应Count最大值的ID_B新列

实现代码

# 加载所需依赖包
library(tidyverse)

# 原始数据构造代码
a <- c("ID_A", "ID_B", "Count")
b <- c("1", "1015", "19389")
c <- c("1", "1019", "206")
d <- c("1", "1027", "1210")
e <- c("2", "1019", "206")
f <- c("2", "1027", "1210")
df <- data.frame(a, b, c, d, e, f)

# 第一步:转换为ID_A、ID_B、Count三列的标准结构化表
df_clean <- df %>%
  # 把除第一列外的所有观测列转成长格式
  pivot_longer(cols = -a, names_to = "tmp_col", values_to = "tmp_val") %>%
  # 将第一行存储的字段名转为正式列名
  pivot_wider(names_from = a, values_from = tmp_val) %>%
  # 移除临时生成的列名标识列
  select(-tmp_col) %>%
  # 将Count从字符型转为数值型方便计算
  mutate(Count = as.numeric(Count))

# 第二步:按ID_A分组,生成最大值对应的ID_B新列
df_result <- df_clean %>%
  group_by(ID_A) %>%
  # which.max返回分组内Count最大值的行位置,直接索引对应ID_B即可
  mutate(`ID_B of max value` = ID_B[which.max(Count)]) %>%
  ungroup()

# 若需要匹配你示例中new_df的行存字段格式,可执行以下转换
new_df <- df_result %>%
  t() %>%
  as.data.frame() %>%
  rownames_to_column("tmp") %>%
  setNames(c("a", "b", "c", "d", "e", "f"))

关键说明

  • 原始数据是字段名存于第一列、每列对应一条观测的特殊结构,需要先做两次长宽转换才能得到标准分析用表,无法直接用pivot_wider一步完成转换
  • 日常分析使用df_result即可(每行一条观测的结构更方便后续计算),最后一步的转置仅为匹配你给出的new_df构造格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:06:03