[英]How to calculate a moving average in R
下面是樣本數據。
Month<- c(20185,20186,20187,20189,201810,201811,201812,20191,20192,20193,20194,20195,20196,
20197,20198,20199,201910,201911,201912,20201
,20202,20203,20204,20205,20206,20207
,20208,20209,202010,202011)
emp<-c(2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,36,36,38,40,42,44,46,48,48,50,52,52,54,56)
第一個問題是我需要使用指定的 function 例如 roll_mean 還是可以簡單地使用平均值? 其次讓它尋找最大日期(在這種情況下為 202011 年)然后構建過去 12 個月的平均值,因此將 202011 年平均到 201912 年,我將如何構建這樣的項目?
您可以使用任何滾動功能構建 12 個月移動平均線。
library(dplyr)
df %>%
mutate(date = lubridate::ymd(paste0(ifelse(nchar(Month) == 5,
paste0(substring(Month, 1, 4), '0',
substring(Month, nchar(Month))), Month), '01'))) %>%
arrange(date) %>%
mutate(rolling_mean = zoo::rollmeanr(emp, 12, fill = NA))
如果您的數據已經訂購,則不需要構造date
變量。 你可以直接這樣做:
df %>% mutate(rolling_mean = zoo::rollmeanr(emp, 12, fill = NA))
這是一個基本的 R 解決方案。
首先獲取日期為class
日期,然后存儲月份的順序,定義一個范圍(span_month),最后移動所有 windows。
Month_t <- as.Date( paste0(
substr(Month,1,4),"-",substr(Month,5,length(Month)),"-1"),
"%Y-%m-%d" )
Month_ord <- order(Month_t)
span_month=12
sapply( 1:((length(Month_ord) + 1) - span_month),
function(x) mean(emp[Month_ord[x]:Month_ord[x + (span_month - 1)]]) )
# [1] 13.00000 15.00000 17.00000 19.00000 21.00000 23.16667 25.16667 27.16667
# [9] 29.16667 31.16667 33.16667 35.16667 37.16667 39.00000 40.83333 42.66667
#[17] 44.33333 45.83333 47.50000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.