我有历史每月数据,需要执行滚动计算。每个期间的价格将与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')
答案 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
。