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

R语言数据处理需求:分组取最小价格并实现宽表转换

R语言数据分组筛选与重塑解决方案

初始数据与现有代码

用户提供的初始数据框:

df <- data.frame(
  code1 = c("ZAZ","ZAZ","ZAZ","ZAZ","ZAZ","ZAZ","JOZ","JOZ","JOZ","JOZ","JOZ","JOZ","TSV","TSV"), 
  code2 = c("NAN","NAN","NAN","NAN","NAN","NAN","NAN","NAN","NAN","NAN","NAN","NAN","TSA","TSA"),
  start = c("Date1.1","Date1.1","Date1.3","Date1.3","Date1.5","Date1.5","Date3.1","Date3.1","Date3.3","Date3.3","Date3.5","Date3.5","Date 5.1","Date 5.1"),
  end = c("Date2.1","Date2.1","Date2.3","Date2.3","Date2.5","Date2.5","Date4.1","Date4.1","Date4.3","Date4.3","Date4.5","Date4.5","Date6.1","Date6.1"),
  price = c(1,2,3,4,5,6,1,2,3,4,5,6,1,2)
)

已编写的代码片段:

df <- df %>% 
  group_by(code1, code2,start,end) %>% 
  slice_min(price) #%>% 
  #group_modify()
df <- df[order(df$price),]

需求1:分组筛选每组最小price记录

你的现有代码已经完成了核心逻辑,这里优化一下命名和分组状态:

df_filtered <- df %>% 
  group_by(code1, code2, start, end) %>% 
  slice_min(price) %>% 
  ungroup() # 取消分组,避免后续操作受分组状态影响

执行后,每个(code1, code2, start, end)组合只会保留price最小的行,比如ZAZ-NAN-Date1.1-Date2.1组会留下price=1的记录。


需求2:以code1、code2为键重塑数据(最多3组start/end/price)

结合group_modify()实现分组重塑,具体代码和说明如下:

完整实现代码

df_reshaped <- df_filtered %>%
  group_by(code1, code2) %>%
  # 为每个分组内的记录添加序号(1到3,不足3条的后续自动填充NA)
  mutate(row_num = row_number()) %>%
  # 使用group_modify处理每个分组
  group_modify(function(.x, .y) {
    # 将当前分组的长格式数据转为宽格式
    .x %>%
      pivot_wider(
        names_from = row_num,
        values_from = c(start, end, price),
        names_glue = "{.value}{row_num}" # 生成start1、end1、price1这类列名
      )
  }) %>%
  ungroup()

group_modify()用法说明

  • group_modify()需要传入一个自定义函数,函数包含两个固定参数:
    • .x:当前分组对应的子数据框(比如code1=ZAZ, code2=NAN的所有筛选后记录)
    • .y:当前分组的键值信息(这里是包含code1和code2的单行数据框)
  • 在函数内部,我们用pivot_wider()将每个分组的长格式数据转为宽格式,最多生成3组start/end/price列,分组内记录不足3条的列会自动填充NA。

最终结果示例

df_reshaped的结构如下(截取部分行):

code1code2start1end1price1start2end2price2start3end3price3
ZAZNANDate1.1Date2.11Date1.3Date2.33Date1.5Date2.55
JOZNANDate3.1Date4.11Date3.3Date4.33Date3.5Date4.55
TSVTSADate 5.1Date6.11NANANANANANA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:57:51