计算 r 中的 7 天平均值

时间:2021-03-01 01:08:10

标签: r

<头>
日期 7_Day_rate_avg
1967-07-01 12.5 不适用
1967-07-02 12.5 不适用
1967-07-03 6 不适用
1967-07-04 8 不适用
1967-07-05 4 不适用
1967-07-06 2 不适用
1967-07-07 11.5 平均
1967-07-08 12.1 平均
1967-07-09 10 平均
1967-07-10 12.0 平均
1967-07-11 11.1 平均
1967-07-12 10 平均

我正在尝试使用滚动均值函数使用 r 中的“rate”列计算 7 天的平均费率,但是我遇到了很多错误。不知道从哪里开始。我希望最终输出看起来像 7_Day_rate_avg 列

library(zoo) rollmean(rate, date, 7)

1 个答案:

答案 0 :(得分:1)

假设数据框dat在最后的Note中重现显示,存在几个问题:

  • 必须用换行符或分号将 library 语句与下一条语句分开
  • rate 是数据框的一列,而不是 R 变量
  • rollmean 的参数是错误的
  • 未指定对齐方式。由于您需要正确对齐,因此请使用 rollmeanr 并在末尾添加 r
  • 需要
  • fill=NA 来指定您要用 NA 值填充前 6 个值。

1) 将所有这些放在一起:

library(zoo)
transform(dat, avg7 = rollmeanr(rate, 7, fill = NA))

给出这个数据框:

         date rate     avg7
1  1967-07-01 12.5       NA
2  1967-07-02 12.5       NA
3  1967-07-03  6.0       NA
4  1967-07-04  8.0       NA
5  1967-07-05  4.0       NA
6  1967-07-06  2.0       NA
7  1967-07-07 11.5 8.071429
8  1967-07-08 12.1 8.014286
9  1967-07-09 10.0 7.657143
10 1967-07-10 12.0 8.514286
11 1967-07-11 11.1 8.957143
12 1967-07-12 10.0 9.814286

2) 交替地将 dat 转换为动物园对象,然后将其 cbind 转换为滚动平均值。在这种情况下,我们不需要 fill=,因为动物园对象会自动对齐。

library(zoo)
rate <- read.zoo(dat)
cbind(rate, avg7 = rollmeanr(rate, 7))

给这个动物园对象:

           rate     avg7
1967-07-01 12.5       NA
1967-07-02 12.5       NA
1967-07-03  6.0       NA
1967-07-04  8.0       NA
1967-07-05  4.0       NA
1967-07-06  2.0       NA
1967-07-07 11.5 8.071429
1967-07-08 12.1 8.014286
1967-07-09 10.0 7.657143
1967-07-10 12.0 8.514286
1967-07-11 11.1 8.957143
1967-07-12 10.0 9.814286

注意

dat 的可重现形式是:

dat <- structure(list(date = c("1967-07-01", "1967-07-02", "1967-07-03", 
"1967-07-04", "1967-07-05", "1967-07-06", "1967-07-07", "1967-07-08", 
"1967-07-09", "1967-07-10", "1967-07-11", "1967-07-12"), rate = c(12.5, 
12.5, 6, 8, 4, 2, 11.5, 12.1, 10, 12, 11.1, 10)), row.names = c(NA, 
-12L), class = "data.frame")