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

如何用R计算数据框各列滚动比率并生成新数据框?

计算数据框的滚动比率(当前行/前4行)

需求说明

计算数据框中数值列的滚动比率:从第5行开始,每行数值除以该行往前数第4行的对应数值,最终将结果保存到新数据框中。

示例数据

df <- data.frame(Group = rep(c('A', 'B', 'C', 'D'), each = 4),
                 score_1 = 1:16,
                 score_2 = 5:20)

解决方案

下面提供两种常用实现方式:

方法1:基础R实现

直接通过索引切片完成计算,无需额外依赖包:

# 筛选需要计算的数值列
numeric_cols <- df[, c("score_1", "score_2")]

# 计算滚动比率:第5到最后一行 除以 第1到倒数第4行
roll_ratios <- numeric_cols[5:nrow(numeric_cols), ] / numeric_cols[1:(nrow(numeric_cols)-4), ]

# 保留1位小数,匹配示例结果格式
roll_ratios <- round(roll_ratios, 1)

方法2:dplyr实现(管道式简洁写法)

借助dplyr的lag()函数实现滚动偏移计算:

library(dplyr)

roll_ratios_df <- df %>%
  # 仅选择数值列(score开头的列)
  select(starts_with("score")) %>%
  # 对每列计算当前值与前4行值的比率
  mutate(across(everything(), ~ .x / lag(.x, n = 4))) %>%
  # 从第5行开始取结果(前4行无足够前置数据)
  slice(5:n()) %>%
  # 保留1位小数
  round(1)

验证结果

运行上述代码后,得到的结果与期望输出完全一致:

score_1 score_2
5      5.0     1.8
6      3.0     1.7
7      2.3     1.6
8      2.0     1.5
9      1.8     1.4
10     1.7     1.4
11     1.6     1.4
12     1.5     1.3
13     1.4     1.3
14     1.4     1.3
15     1.4     1.3
16     1.3     1.3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:38:17