【发布时间】:2021-03-07 04:03:00
【问题描述】:
我有一个变量的数据,我想获得前 5 年同一个月同一变量的当前水平与平均值之间的差异。
library(tidyverse)
library(data.table)
library(lubridate)
MWE <- as.data.table(ggplot2::economics) %>%
.[,c("pce","psavert","uempmed","unemploy"):=NULL]
> MWE
date pop
1: 1967-07-01 198712.0
2: 1967-08-01 198911.0
3: 1967-09-01 199113.0
4: 1967-10-01 199311.0
5: 1967-11-01 199498.0
---
570: 2014-12-01 319746.2
571: 2015-01-01 319928.6
572: 2015-02-01 320074.5
573: 2015-03-01 320230.8
574: 2015-04-01 320402.3
我可以按月完成,但我无法将对当前行的引用纳入到类似year(date) < year(currentline) & year(date) >= year(currentline)-6 的操作中
MWE_2 <- MWE[,MeanPastYears:=mean(pop),by=month(date)]
我想要的输出是
date pop avg_5yrs
1: 1967-07-01 198712.0 NA
2: 1967-08-01 198911.0 NA
3: 1967-09-01 199113.0 NA
4: 1967-10-01 199311.0 NA
5: 1967-11-01 199498.0 NA
---
570: 2014-12-01 319746.2 313013.8
571: 2015-01-01 319928.6 313192.1
572: 2015-02-01 320074.5 313350.7
573: 2015-03-01 320230.8 313511.2
574: 2015-04-01 320402.3 313640.3
【问题讨论】:
-
试试
data.table::frollmean -
你能提供一些玩具数据/预期结果
-
@CatalystRPA 我做了
-
但是你想要的输出不是错了吗?如果您检查 2010 年 4 月、2011 年 4 月、...到 2014 年 4 月,平均值为
313640而不是311834... -
嗯,我是通过 Excel 完成的,但过了一年。我纠正它
标签: r date data.table data-manipulation lubridate