根据条件滞后

时间:2020-10-19 05:41:03

标签: r dplyr

我有历史每月数据,需要执行滚动计算。每个期间的价格将与3年后的日期进行比较,即当前价格/基准价格。基数是过去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')

1 个答案:

答案 0 :(得分:1)

您的意思是这样吗?

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))

如果Period中的最低日期是2010年之后,我们选择最低Price值的Period或使用3年以前的Price作为BasePrice