如何计算数据的自定义移动平均值(和其他公式)?

时间:2018-12-14 10:35:30

标签: r

我有这个数据框:

> df

idx count  
1    2
2    3
3    6
4    1
5    8
6    3
7    9
8    10
9    20
10   3
11   4
12   7
13   1
14   9
15   6
16   2
17   0
18   3
19   4
20   6

我想做什么:

  • 使用以下公式计算移动平均值:(x1 + x2 + x3)/ 3,

  • 以(x2-x1)/ 1,

  • 计算坡度
  • mvave的标准偏差sd()

  • 总体倾斜平均值

  • stdev总体均值。

使用df进行解释:

> df_new

idx   count    mvave     incline     sd    incline-mean       sd-mean
1      2        2          2          2         -3.35          -4.47
2      3        3.67       1.67       0.88      -3.68
3      6        3.33       -0.33      0.88       ...
4      1        5          1.67       0.84
5      8        4          -1         1.35
6      3        6.67       2.67       1.76
7      9        7.33       0.67       3.48
8      10       13         5.67       2.87
9      20       11         -2         2
10     3        9          -2         3.24
11     4        4.67       -4.33      2.71
12     7        4          -0.67      0.84
13     1        5.67       1.67       0.88
14     9        5.33       -0.33      0.19
15     6        5.67       0.33       1.64
16     2        2.67       -3         2.08
17     0        1.67       -1         0.51
18     3        2.33       0.67       1.39
19     4        4.33       2          1.02
20     6        6          1.67       0.67

计算示例:

mvave:      1) (2+3+6)/3 = 3.67
            2) (3+6+1)/3 = 3.33
            ....
incline:    1) (3.67-2)/1 = 1.67
            2) (3.33-3.67) = -0.33
            ....
stdev:      1) sd(2+3.67+3.33) = 0.88
            2) sd(3.67+3.33+5) = 0.88
                ...
incline-mean:   1.67 - mean(df$count) = -3.35 
                ...
sd-mean:        0.88 - mean(df$count) = -4.47
                ...

我知道如何计算所有这些值,但是执行迭代和重置x参数是我失败的地方。

我知道有一个rollmean函数,但是我想逐步进行此操作和其他计算。

1 个答案:

答案 0 :(得分:1)

一个选项是@Entity @Table(name="users") @DynamicUpdate public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; //other fields... }

rollapply/rollmean

数据

library(zoo)
library(dplyr)
df %>%
   mutate(mvave = rollmean(count, 3, fill = TRUE), 
          mvave = ifelse(row_number() %in% c(1, n()), count, mvave),
          incline = c(first(mvave), diff(mvave)),
          sd = rollapply(mvave, 3, FUN = sd, fill = TRUE), 
          incline_mean = incline - mean(count), 
          sd_mean = sd - mean(count))
#  idx count     mvave    incline        sd incline_mean   sd_mean
#1    1     2  2.000000  2.0000000 1.0000000   -3.3500000 -4.350000
#2    2     3  3.666667  1.6666667 0.8819171   -3.6833333 -4.468083
##3    3     6  3.333333 -0.3333333 0.8819171   -5.6833333 -4.468083
#4    4     1  5.000000  1.6666667 0.8388705   -3.6833333 -4.511130
#5    5     8  4.000000 -1.0000000 1.3471506   -6.3500000 -4.002849
#6    6     3  6.666667  2.6666667 1.7638342   -2.6833333 -3.586166
#7    7     9  7.333333  0.6666667 3.4801022   -4.6833333 -1.869898
#8    8    10 13.000000  5.6666667 2.8738927    0.3166667 -2.476107
#9    9    20 11.000000 -2.0000000 2.0000000   -7.3500000 -3.350000
#10  10     3  9.000000 -2.0000000 3.2375116   -7.3500000 -2.112488
#11  11     4  4.666667 -4.3333333 2.7148426   -9.6833333 -2.635157
#12  12     7  4.000000 -0.6666667 0.8388705   -6.0166667 -4.511130
#13  13     1  5.666667  1.6666667 0.8819171   -3.6833333 -4.468083
#14  14     9  5.333333 -0.3333333 0.1924501   -5.6833333 -5.157550
#15  15     6  5.666667  0.3333333 1.6442943   -5.0166667 -3.705706
#16  16     2  2.666667 -3.0000000 2.0816660   -8.3500000 -3.268334
#17  17     0  1.666667 -1.0000000 0.5091751   -6.3500000 -4.840825
#18  18     3  2.333333  0.6666667 1.3877773   -4.6833333 -3.962223
#19  19     4  4.333333  2.0000000 1.8358568   -3.3500000 -3.514143
#20  20     6  6.000000  1.6666667 1.0000000   -3.6833333 -4.350000