如何用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
相关产品推荐
相关产品推荐

