如何在R语言中计算列内相邻行值均值的累加与累积列?
解决方案
假设你的数据集已加载为数据框df,以下是实现需求的两种常用方法:
1. 生成CUM列
CUM列的逻辑是当前行Value与上一行Value的算术平均值,第一行无前置数据,设为NA。
基础R实现
# 构造示例数据(已有数据集可跳过此步) df <- data.frame( Row = 1:4, Date = as.Date(c("2022-01-03", "2022-01-04", "2022-01-05", "2022-01-06")), Value = c(400, 350, 368, 418) ) # 添加CUM列 df$CUM <- c(NA, (df$Value[-1] + df$Value[-nrow(df)])/2)
运行后得到的数据集与示例一致:
Row Date Value CUM 1 1 2022-01-03 400 NA 2 2 2022-01-04 350 375 3 3 2022-01-05 368 359 4 4 2022-01-06 418 393
Tidyverse(dplyr)实现
若习惯用tidyverse工具链:
library(dplyr) df <- df %>% mutate(CUM = (Value + lag(Value))/2)
lag(Value)会自动获取每行的前一行Value值,第一行无前置值时返回NA,完美匹配需求。
2. 计算B值
观察公式可知,B值就是CUM列所有非NA值的总和,直接求和即可:
基于CUM列计算
B <- sum(df$CUM, na.rm = TRUE) # 输出结果:1127
直接计算(无需生成CUM列)
若不需要保留CUM列,可直接通过Value列计算:
B <- sum((df$Value[-1] + df$Value[-nrow(df)])/2) # 输出结果:1127
内容的提问来源于stack exchange,提问作者Mee
相关产品推荐
相关产品推荐

