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

在R中使用dplyr复现SQL OVER(PARTITION BY)累计求和列的问题

报错原因

  • with_order参数使用错误:fun参数需传入函数对象(如cumsum),不可传入已执行的函数调用表达式(如cumsum(new_vaccinations)),需传入函数的计算值要放在x参数中,参数传混是你报错的直接原因。
  • 实现方向偏差:with_order仅对应SQL窗口函数中的ORDER BY排序逻辑,你需要的PARTITION BY分组逻辑在dplyr中对应group_by()函数,二者功能完全不同。

正确实现方案

你的核心需求是按location分组计算累计接种量,对应SQL的SUM(new_vaccinations) OVER (PARTITION BY location ORDER BY date),使用dplyr实现的标准写法如下:

test <- mydf %>%
  # 对应 PARTITION BY location 分组逻辑
  group_by(location) %>%
  # 分组内按日期排序,对应窗口函数的 ORDER BY date
  arrange(date, .by_group = TRUE) %>%
  # 计算分组内累计和
  mutate(total_vax = cumsum(new_vaccinations)) %>%
  # 计算完成后取消分组,避免影响后续操作
  ungroup()

如果需要保留原数据的行顺序不做排序,可配合with_order实现:

test <- mydf %>%
  group_by(location) %>%
  mutate(total_vax = with_order(
    order_by = date,
    fun = cumsum,
    x = new_vaccinations
  )) %>%
  ungroup()

如果你需要的是同分组所有行一致的总接种量(对应SQL无ORDER BY的OVER(PARTITION BY)逻辑),写法更简单:

test <- mydf %>%
  group_by(location) %>%
  mutate(total_vax = sum(new_vaccinations)) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:45:04