[英]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 個滯后值放在一起,並且如果沒有更清晰的代碼,就會看到這變得混亂。
類似的問題:
在使用滾動平均值之前,您可以滯后 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.