R 基于条件的滞后
我有历史月度数据,需要进行滚动计算。每个期间的价格将与3年前的价格进行比较,即当前价格/基价。这里的基数是3年前的日期。每个月都会滚动。每个月应比较3年粘贴日期。我正在使用R 基于条件的滞后,r,dplyr,R,Dplyr,我有历史月度数据,需要进行滚动计算。每个期间的价格将与3年前的价格进行比较,即当前价格/基价。这里的基数是3年前的日期。每个月都会滚动。每个月应比较3年粘贴日期。我正在使用lag函数查找过去的日期。它在2013年1月之前返回NA,这是正确的 我想添加其他标准-如果(位置、资产、子类型)组合的最小日期为2010年后,则应将其与组合的最小日期进行比较。例如,最短日期为2014年1月,因此2014年1月之后的所有价格应与2014年1月(静态基准年)进行比较 您可以从下面的代码中读取数据- librar
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')
库(readxl)
图书馆(httr)
得到(”https://sites.google.com/site/pocketecoworld/Trend_Sale%20-%20Copy.xlsx”,写入磁盘(tf%
过滤器(周期>='2013-01-31')
你的意思是这样的吗
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年之后,我们选择Period
的Price
最小Period
值,或者使用3年前的Price
作为BasePrice这是完美的。我们是否可以在选择组合的第一个非NA值(位置、资产、子类型)的末尾放置一个过滤器,以获得t中的第一个非NA值您可以添加slice(即(!is.na(Index))[1])
刚刚实现的组合-过滤器(!is.na(BasePrice))也将在groupby()生效时工作