簡體   English   中英

如何計算 R 中的移動平均線

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM