在R中运行函数的意思

时间:2018-01-23 13:41:50

标签: r function

根据我的值,我需要一个函数来获得以下结果。 enter image description here

函数必须计算当前值的平均值和之前的3个值。 该功能应该是灵活的,相同的计算可以应用于2,4,5或x先前的值,例如:当前值的平均值和前面的2个值。

请考虑,我的日期有随机数,而不是像上面的例子中的升序数字

2 个答案:

答案 0 :(得分:3)

您需要的是滚动均值,在参数k(我的示例中为4)中,您提供滚动窗口的整数宽度。查看文档页面,了解动物园包的rollmean功能?rollmean

<强>动物园

library(zoo) 
library(dplyr)
df <- data.frame(number = 1:20)
  df %>% mutate(rolling_avg = rollmean(number, k = 4 , fill = NA, align = "right"))

<强> RcppRoll

library(RcppRoll)
df %>% mutate(rolling_avg = roll_mean(number, n = 4, fill = NA, align = "right"))

<强>输出

   number rolling_avg
1       1          NA
2       2          NA
3       3          NA
4       4         2.5
5       5         3.5
6       6         4.5
7       7         5.5
8       8         6.5
9       9         7.5
10     10         8.5
11     11         9.5
12     12        10.5
13     13        11.5
14     14        12.5
15     15        13.5
16     16        14.5
17     17        15.5
18     18        16.5
19     19        17.5
20     20        18.5

使用评论中提供的其他矢量:

  df <- data.frame(number = c(1,-3,5,4,3,2,-4,5,6,-4,3,2,3,-4,5,6,6,3,2))
  df %>% mutate(rolling_avg = rollmean(number, 4, fill = NA, align = "right"))

<强>输出

   number rolling_avg
1       1          NA
2      -3          NA
3       5          NA
4       4        1.75
5       3        2.25
6       2        3.50
7      -4        1.25
8       5        1.50
9       6        2.25
10     -4        0.75
11      3        2.50
12      2        1.75
13      3        1.00
14     -4        1.00
15      5        1.50
16      6        2.50
17      6        3.25
18      3        5.00
19      2        4.25

答案 1 :(得分:1)

您还可以使用rollify包中的tibbletime函数为任何函数创建自定义滚动功能。对于mean,它看起来像这样(使用来自@ mpalanco答案的数据):

library(dplyr)
library(tibbletime)

rolling_mean <- rollify(mean, window = 4)

df %>% mutate(moving_average = rolling_mean(number))

给你:

   number moving_average
1       1             NA
2       2             NA
3       3             NA
4       4            2.5
5       5            3.5
6       6            4.5
7       7            5.5
8       8            6.5
9       9            7.5
10     10            8.5
11     11            9.5
12     12           10.5
13     13           11.5
14     14           12.5
15     15           13.5
16     16           14.5
17     17           15.5
18     18           16.5
19     19           17.5
20     20           18.5

这种方法的好处是很容易扩展到滚动平均值以外的东西。