日期 | 率 | 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)
答案 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")