Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于条件的滞后_R_Dplyr - Fatal编程技术网

R 基于条件的滞后

R 基于条件的滞后,r,dplyr,R,Dplyr,我有历史月度数据,需要进行滚动计算。每个期间的价格将与3年前的价格进行比较,即当前价格/基价。这里的基数是3年前的日期。每个月都会滚动。每个月应比较3年粘贴日期。我正在使用lag函数查找过去的日期。它在2013年1月之前返回NA,这是正确的 我想添加其他标准-如果(位置、资产、子类型)组合的最小日期为2010年后,则应将其与组合的最小日期进行比较。例如,最短日期为2014年1月,因此2014年1月之后的所有价格应与2014年1月(静态基准年)进行比较 您可以从下面的代码中读取数据- librar

我有历史月度数据,需要进行滚动计算。每个期间的价格将与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')
库(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()生效时工作