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

如何对数据框最近3行列求和并与相邻列求和结果相除?

数据框列最近3行有效数值求和及列间比值计算

需求说明

对数据框中各列的最近3行有效数值(非NA值)求和,将每列的求和结果除以前一列的求和结果,最后在原表格中添加一行展示这些计算比值。

示例数据

# 示例数据框d
d <- 
structure(list(Date = c("07.10.2021", "08.10.2021", "09.10.2021", 
"10.10.2021", "11.10.2021", "12.10.2021", "01.10.2022"), X1 = c(20L, 
26L, 29L, 20L, 20L, 30L, 39L), X2 = c(25L, 25L, 29L, 29L, 30L, 
30L, NA), X3 = c(25L, 25L, 25L, 25L, 30L, NA, NA), X4 = c(26L, 
26L, 26L, 31L, NA, NA, NA), X5 = c(26L, 25L, 39L, NA, NA, NA, 
NA), X6 = c(25L, 31L, NA, NA, NA, NA, NA), X7 = c(31L, NA, NA, 
NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, 7L))

代码实现

1. 定义求和函数

编写函数提取列中最近3个非NA值并求和:

sum_last3 <- function(x) {
  # 剔除NA后取最后3个值,计算求和结果
  sum(tail(na.omit(x), 3))
}

2. 计算各列最近3行有效数值的和

对数据框中的数值列(排除Date列)应用上述函数:

# 提取数值列,计算每列的最近3个有效数值之和
col_sums <- sapply(d[, -1], sum_last3)

3. 计算列间比值

生成列间比值向量:第一列无前置列,设为NA;从第二列开始,用当前列求和结果除以前一列求和结果:

ratios <- c(NA, col_sums[-1] / col_sums[-length(col_sums)])

4. 添加结果行到原数据框

将比值构造成新行,追加到原数据框末尾:

# 构造TOTAL行
total_row <- data.frame(Date = "TOTAL", t(ratios))
# 合并到原数据框
d_with_total <- rbind(d, total_row)

# 查看最终结果(空值显示为空)
print(d_with_total, na.print = "")

最终输出

运行代码后得到的结果如下:

Date X1        X2        X3    X4        X5        X6        X7
1 07.10.2021 20        25        25    26        26        25        31
2 08.10.2021 26        25        25    26        25        31          
3 09.10.2021 29        29        25    26        39                    
4 10.10.2021 20        29        25    31                                
5 11.10.2021 20        30        30                                    
6 12.10.2021 30        30                                                
7 01.10.2022 39                                                          
8      TOTAL    1.000000 0.8988764 1.0375 1.0843373 0.6222222 0.5535714

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 12:44:55