r - 基于条件的滞后
问题描述
我有历史月度数据,需要进行滚动计算。每个时期的价格将与 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')
解决方案
你的意思是这样的吗?
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
。
推荐阅读
- c++ - C++ 中信号量的编写者偏好
- php - 如何在 cakePHP 3.6 中通过一些条件检查来限制或访问控制器的所有功能
- testng - “数据:”在地址栏中 chromedriver(带有 testng 的 maven 项目)
- .net - Labview 使用带有 3rd 方 dll 的 .net 列表类型
- android - react native 中的 createDrawerNavigator
- filter - 在 Excel 中过滤多维数据集 - 无法正常工作
- c# - 如何使结构接收不是系统变量的变量
- spring-kafka - 类级别的 KafkaListener 注释,忽略错误处理程序属性
- symfony - Symfony 3.4 试图调用类“AppBundle\Entity\User”的名为“createQueryBuilder”的未定义方法
- c++ - CMake:为 add_custom_target 添加可执行文件