如何基于分组大小对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包的分组操作实现,步骤如下:
- 将字符型的
value转换为数值型 - 按
name分组,计算每组的总数量 - 算出每组的单位增量,再对增量进行分组累加得到
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
相关产品推荐
相关产品推荐

