R语言计算两个变量近1个月滚动比率:group1值除以上月group0值
R语言计算单月滚动比率实现方法
你的需求本质是取当前行group_1值与上一行group_0值做除法,有两种常用实现方式:
前置准备
首先确认你的数据已按时间升序排列,若原始数据为矩阵,先转成数据框:
# 矩阵转数据框示例 df <- as.data.frame(你的矩阵变量名)
你也可以用下方示例数据测试效果:
# 匹配你需求的示例数据 df <- data.frame( month = c("2023-01", "2023-02", "2023-03"), group_0 = c(11, 45, 32), group_1 = c(NA, 10, 60) )
方法1:dplyr包实现(代码简洁易读)
用lag()函数直接提取上一行的group_0值计算:
library(dplyr) df <- df %>% mutate(rolling_rate = group_1 / lag(group_0, n = 1))
计算结果的rolling_rate列,第二行值为10/11≈0.909,第三行值为60/45≈1.333,完全符合你给出的运算规则。
方法2:base R实现(无需安装额外包)
通过索引切片对齐需要计算的两列:
# 第一行无上月数据补NA,后续行对应相除 df$rolling_rate <- c(NA, df$group_1[-1] / df$group_0[-nrow(df)])
注意事项
如果你的月份列是字符串格式,建议先转成日期类格式再排序,避免出现时间顺序错误:
# 年月字符串转日期示例 df$month <- as.Date(paste0(df$month, "-01")) # 按时间升序排序 df <- df[order(df$month), ]
内容的提问来源于stack exchange,提问作者Lty
相关产品推荐
相关产品推荐

