R语言实现相同周数跨年份行迭代部分求和的方法咨询
实现方案
实现思路
- 拆分
year_week字段,提取出独立的年份、周数字段,以周数作为分组维度 - 按周数分组后,同组的所有行都是不同年份的同一周数据,用组内
input总和减去当前行的input值,即可得到排除当前行后其他年份同周数的求和结果 - 针对仅2000年存在的第53周,按需求特殊处理,将求和结果替换为当前行
input原值
完整代码
首先修正示例数据的语法错误,再执行计算逻辑:
library(dplyr) set.seed(123) # 构造示例数据 year_week <- c(200045:200053, 200145:200152, 200245:200252) input <- as.vector(sample(1:10,25,TRUE)) df <- data.frame(year_week, input) # 计算partial_sum df <- df %>% # 拆分年、周字段 mutate( year = as.integer(substr(year_week, 1, 4)), week = as.integer(substr(year_week, 5, 6)) ) %>% # 按周数分组 group_by(week) %>% mutate( # 同组总和减当前值得到其他年份同周数的和 partial_sum = sum(input) - input, # 特殊处理仅出现一次的53周 partial_sum = ifelse(week == 53 & n() == 1, input, partial_sum) ) %>% ungroup() %>% # 可选:移除临时生成的年、周字段 select(-year, -week)
结果验证
打印输出df即可查看计算结果,完全匹配需求:
- 普通周数(45-52周)的
partial_sum为另外两年同周数的input之和 - 2000年第53周的
partial_sum等于当前行的input值
内容的提问来源于stack exchange,提问作者gogo88
相关产品推荐
相关产品推荐

