如何在R语言DataFrame中按行计算跨年度列的累计求和
R语言DataFrame按行累计求和实现方法
测试数据
data <- data.frame( `Delivery Year` = c('1976','1977','1978','1979'), `Year.1976` = c(10,3,8,0), `Year.1977` = c(5,0,5,0), `Year.1978` = c(10,10,0,0), `Year.1979` = c(13,0,0,14) )
需求为保留第一列Delivery Year不变,对后续所有年份列按行逐列累计求和,替换原列数值生成累计结果。
实现方法
方法1:基础R(最简高效实现)
直接用apply按行调用cumsum累计函数,转置后回写即可:
# 排除第一列非数值列,按行求累计和后回写 data[, -1] <- t(apply(data[, -1], MARGIN = 1, FUN = cumsum))
方法2:tidyverse风格实现
适合习惯dplyr语法的场景:
library(dplyr) data <- data %>% rowwise() %>% # 按行对所有年份列做累计求和,按列位置对应赋值 mutate(across(starts_with("Year."), ~cumsum(c_across(starts_with("Year.")))[which(names(data)[-1] == cur_column())])) %>% ungroup()
输出结果验证
运行代码后得到的结果与预期完全一致:
print(data) # Delivery Year Year.1976 Year.1977 Year.1978 Year.1979 # 1 1976 10 15 25 38 # 2 1977 3 3 13 13 # 3 1978 8 13 13 13 # 4 1979 0 0 0 14
内容的提问来源于stack exchange,提问作者Jaroslav Kotrba
相关产品推荐
相关产品推荐

