簡體   English   中英

如何計算第 n 個先前值的滾動平均值

[英]How to calculate the rolling mean of the nth previous values

因此,假設我有一個包含一系列值的數據框,這些值分配給兩個組之一('Gp'):

set.seed(12)
df <- data.frame(id = sample(1:50,50), Gp = sample(2, 50, TRUE)) 

以下是其中的前 20 個值:

df
row  id Gp
1   4  1
2  41  1
3  46  1
4  13  1
5   8  2
6   2  2
7  48  2
8  28  2
9   1  2
10 42  2
11 16  2
12 32  1
13 15  2
14 38  2
15 10  1
16 40  1
17 35  1
18 18  2
19 22  1
20 50  2

我想做的是在當前行之前取值 10、11 和 12 的滾動平均值,然后從中減去當前(行)值。 我還想用 NA 填充,按另一列('Gp')分組並右對齊。

我看過其他一些帖子,並且能夠使用 dplyr 減去第 n 個先前值部分來做到這一點:

df2 <- df %>% group_by(Gp) %>%
  mutate( rm = rollmeanr(id,k = 3, fill = NA)) %>%
  ungroup

但這只是當前行和它之前的 2 行。 在上面的示例中,我想要做的是,例如第 15 行:

row 15 - (row 5 + row 4 + row 3)/3

= 10 - (8 + 12 + 46) / 3 = -12

我希望它被放置在一個新列中,該列附加到原始 df 的新名稱中。 如果可能的話,我也想使用 dplyr 。

對於此示例,所需輸出 df 的這一行是:

row id Gp rm
15 10  1 -12

我認為 lag() 可能會有所幫助,但需要將 3 個滯后值放在一起,並且如果沒有更清晰的代碼,就會看到這變得混亂。

類似的問題:

計算前 6 個數據點的平均值

接下來幾天的移動平均值,不包括當天

計算具有 NAs r 的時間序列上第 n 個數據點的移動平均值

在使用滾動平均值之前,您可以滯后 id 變量:

library(dplyr)

df |> 
  group_by(Gp) |>
  mutate(rm = id - zoo::rollmeanr(lag(id, 10), k = 3, fill = NA)) |>
  ungroup()

更新:錯字+添加group_by

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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