首页 > 解决方案 > 使用 groupby 和不同窗口长度的滚动平均

问题描述

我正在尝试根据 R 中的 ID 列和测量时间标签创建列的滚动平均值,但我遇到了很多麻烦。

这是我的数据框的样子:

ID Measurement Value

A    1           10

A    2           12

A    3           14

B    1           10

B    2           12

B   3           14

B   4           10

问题是我的每个 ID 的测量计数从 9 到 76 不等,所以我还没有找到一个解决方案,可以在处理不同的窗口长度时为每个 ID 创建滚动平均值列。

我的目标是这样的数据框:

ID Measurement Value Average

A    1           10 NA

A    2           12 11

A    3           14 12

B    1           10 NA

B    2           12 11

B   3           14  12 

B   4           10 11.5 

标签: rrolling-computation

解决方案


使用您的数据:

library(dplyr)

dat %>%
   group_by(Id) %>%
   mutate(Avrg = cumsum(Value)/(1:n()))

# A tibble: 7 x 4
# Groups:   Id [2]
  Id    Measurement Value  Avrg
  <chr>       <int> <int> <dbl>
1 A               1    10  10  
2 A               2    12  11  
3 A               3    14  12  
4 B               1    10  10  
5 B               2    12  11  
6 B               3    14  12  
7 B               4    10  11.5

数据:

structure(list(Id = c("A", "A", "A", "B", "B", "B", "B"), 
               Measurement = c(1L, 2L, 3L, 1L, 2L, 3L, 4L), 
               Value = c(10L, 12L, 14L, 10L, 12L, 14L, 10L)
               ), 
          class = "data.frame", row.names = c(NA, -7L))

PS我很确定10的平均值是10,而不是NA


推荐阅读