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

如何基于分组大小对value值拆分后生成累加列goal?

问题:按分组生成累加的goal列

需要为数据框创建goal列,规则如下:

  • 将value值除以对应name分组的总数量
  • 再按分组内的顺序累加该结果

具体示例:

  • 分组B的总数量为2,value为1.2,每次累加值为1.2/2=0.6,因此第一次取值0.6,第二次累加后为1.2
  • 分组C的总数量为3,value为0.6,每次累加值为0.6/3=0.2,依次累加后得到0.2、0.4、0.6

可复现数据

name <- c("A","B","B","C","C","C")
date <- c('2024-01-01', '2024-01-01', '2024-02-01', '2024-01-01','2024-02-01','2024-03-01')
value<- c("1.0","1.2","1.2","0.6","0.6","0.6")
count <- c("1","1","2","1","2","3")
df <- data.frame(name,date,value,count)

数据预览:

name       date value count
1    A 2024-01-01   1.0     1
2    B 2024-01-01   1.2     1
3    B 2024-02-01   1.2     2
4    C 2024-01-01   0.6     1
5    C 2024-02-01   0.6     2
6    C 2024-03-01   0.6     3

期望输出

goal <- c("1.0","0.6","1.2","0.2","0.4","0.6")
finaldf <- data.frame(name,date,value,count,goal)

结果预览:

name       date value count goal
1    A 2024-01-01   1.0     1  1.0
2    B 2024-01-01   1.2     1  0.6
3    B 2024-02-01   1.2     2  1.2
4    C 2024-01-01   0.6     1  0.2
5    C 2024-02-01   0.6     2  0.4
6    C 2024-03-01   0.6     3  0.6

解决方案

可以使用dplyr包的分组操作实现,步骤如下:

  1. 将字符型的value转换为数值型
  2. 按name分组,计算每组的总数量
  3. 算出每组的单位增量,再对增量进行分组累加得到goal

代码实现:

library(dplyr)

finaldf <- df %>%
  mutate(value = as.numeric(value)) %>%
  group_by(name) %>%
  mutate(
    goal = cumsum(value / n())
  ) %>%
  ungroup() %>%
  mutate(goal = as.character(goal)) # 保持与示例一致的字符型格式

执行后即可得到符合要求的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:20:27