首页 > 解决方案 > 基于条件的滞后

问题描述

我有历史月度数据,需要进行滚动计算。每个时期的价格将与 3 年前的日期进行比较,即当前价格/基准价格。这里 Base 是 3 年过去的日期。它将在每个月滚动。每个月都应该比较 3 年粘贴日期。我正在使用lag函数来找出过去的日期。它在 2013 年 1 月之前返回 NA,这是正确的。

我想添加其他标准 - 如果(位置、资产、子类型)的最小组合日期是 2010 年之后,则应将其与组合的最小日期进行比较。例如,最小日期是 2014 年 1 月,因此 2014 年 1 月之后的所有价格都应与 2014 年 1 月(静态基准年)进行比较。

您可以从下面的代码中读取数据 -

library(readxl)
library(httr)
GET("https://sites.google.com/site/pocketecoworld/Trend_Sale%20-%20Copy.xlsx", write_disk(tf <- tempfile(fileext = ".xlsx")))
dff <- read_excel(tf)

我的代码 -

dff <- dff %>% group_by(Location, Asset, SubType) %>% 
  mutate(BasePrice=lag(Price, 36), 
         Index = round(100*(Price/BasePrice), 1)) %>% 
  filter(Period >= '2013-01-31')

标签: rdplyr

解决方案


你的意思是这样的吗?

library(dplyr)

dff %>%
  group_by(Location, Asset, SubType) %>% 
  mutate(BasePrice= if(lubridate::year(min(Period)) > 2010) 
                       Price[which.min(Period)] else lag(Price, 36), 
         Index = round(100*(Price/BasePrice), 1))

如果最小日期在Period2010 年之后,我们选择Price最小值Period或使用 3 年前Price作为BasePrice


推荐阅读