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

如何基于分组与dist索引汇总R语言数据框的vals列值?

Hey there! 你已经搞定了分组和dist列的计算,现在要在每个grps分组里,给每行计算所有dist值≤当前行dist的vals之和对吧?我给你两个适配dplyr的解决方案,都能得到你想要的结果:

方法1:用rowwise()直观实现(适合小数据集)

这个方法逻辑直白,先按组拆分,然后逐行处理,筛选同组内符合条件的行再求和:

library(dplyr)

final_result <- rslt %>%
  group_by(grps) %>%
  rowwise() %>%
  # 筛选当前组里dist<=当前行dist的vals,求和
  mutate(sum = sum(vals[dist <= cur_data()$dist])) %>%
  # 如果不需要保留分组结构,可以去掉ungroup()
  ungroup()

方法2:用purrr::map_dbl()更高效(适合大数据集)

如果你的数据集比较大,rowwise()的效率会稍弱,用map_dbl()遍历组内的行,速度会更快:

library(dplyr)
library(purrr)

final_result <- rslt %>%
  group_by(grps) %>%
  # 遍历每个dist值,计算同组内dist<=该值的vals总和
  mutate(sum = map_dbl(dist, ~sum(vals[dist <= .x]))) %>%
  ungroup()

验证结果

运行任意一段代码后,你都会得到预期的输出:

# A tibble: 5 × 5
   vals  grps dts        dist   sum
  <dbl> <dbl> <date>     <dbl> <dbl>
1     1     1 2020-01-01     1     3
2     2     1 2020-01-02     0     2
3     3     2 2020-01-03     2    12
4     4     2 2020-01-04     1     9
5     5     2 2020-01-05     0     5

小提示

  • cur_data()在rowwise()模式下,会返回当前组的所有数据,所以cur_data()$dist能拿到同组的全部dist值,用来筛选符合条件的vals。
  • map_dbl()里的.x代表当前遍历到的dist值,逻辑和rowwise()一致,但底层实现更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:07:33