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

如何单步按district分组:求和incoming并取末季度stock值?

高效实现分组聚合:求和营收字段+提取季度末库存字段

需求说明

按district字段分组:

  • 对incoming字段跨季度求和
  • 获取最后一个季度(第3季度)的stock类字段值(共8个此类字段,不可跨季度求和)

实际数据集规模:约45000行、41个变量

示例数据

library(dplyr)
df <- data.frame(
  "district" = rep(c("ARA", "BJI", "CMC"), each=3),
  "quarter" = rep(1:3, 3),
  "incoming" = c(4044, 2992, 2556, 1639, 9547, 1191, 2038, 1942, 225),
  "stock" = c(19547, 3160, 1533, 5355, 6146, 355, 5816, 1119, 333)
)
df

期望结果

# A tibble: 3 × 3
  district stock incoming
  <chr>    <dbl>    <dbl>
1 ARA       1533     9592
2 BJI        355    12377
3 CMC        333     4205

现有实现方案

通过三步拆分处理后合并结果:

basea <- df %>% 
  group_by(district) %>% 
  filter(quarter == 3) %>% # 仅保留最后一季度数据
  summarise(across(stock, sum)) 

baseb <- df %>% 
  group_by(district) %>% 
  summarise(across(incoming, sum)) 

final <- full_join(basea, baseb)

优化实现方案(一步完成)

利用dplyr的summarise同时完成两种聚合逻辑,无需拆分合并,效率更高:

library(dplyr)

final <- df %>%
  group_by(district) %>%
  summarise(
    # 对incoming字段跨季度求和
    incoming = sum(incoming),
    # 批量提取所有stock类字段的第3季度值(可根据实际字段名调整匹配规则)
    across(starts_with("stock"), ~ .x[quarter == 3])
  )

补充说明

  • 如果stock类字段的命名规则不是以stock开头,可替换starts_with("stock")为其他匹配方式(比如ends_with("_stock")或直接指定字段向量c("stock1", "stock2", ...))
  • 若每个district的quarter=3存在重复行,可添加first()确保取值唯一:~ first(.x[quarter == 3])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:50:34