r - 在数据框中添加一列,其中将包括特定数量观察的频率的平均值
问题描述
我有下面的数据框,其中包含日期及其频率。我想添加第三列来估计前 7 天的平均值。鉴于这可以从'2020-09-18'
和以后开始工作,因为以前的日期没有 7 天的数据,因为第一个日期是'2020-09-12'
,从2020-09-12
直到的平均值2020-09-17
应该根据以前存在的天数计算,否则应该留下它们NAs
date<-c(as.Date("2020-09-15", "%Y-%m-%d"),as.Date("2020-09-14", "%Y-%m-%d"),
as.Date("2020-09-13", "%Y-%m-%d"),as.Date("2020-09-12", "%Y-%m-%d"),
as.Date("2020-09-15", "%Y-%m-%d"),as.Date("2020-09-14", "%Y-%m-%d"),
as.Date("2020-09-13", "%Y-%m-%d"),as.Date("2020-09-12", "%Y-%m-%d"),
as.Date("2020-09-16", "%Y-%m-%d"),as.Date("2020-09-17", "%Y-%m-%d"),
as.Date("2020-09-18", "%Y-%m-%d"),as.Date("2020-09-19", "%Y-%m-%d"),
as.Date("2020-09-20", "%Y-%m-%d"),as.Date("2020-09-21", "%Y-%m-%d"),
as.Date("2020-09-22", "%Y-%m-%d"),as.Date("2020-09-23", "%Y-%m-%d"),
as.Date("2020-09-24", "%Y-%m-%d"),as.Date("2020-09-25", "%Y-%m-%d"),
as.Date("2020-09-26", "%Y-%m-%d"),as.Date("2020-09-27", "%Y-%m-%d"),
as.Date("2020-09-28", "%Y-%m-%d"),as.Date("2020-09-29", "%Y-%m-%d"),
as.Date("2020-09-30", "%Y-%m-%d"),as.Date("2020-10-01", "%Y-%m-%d"))
value<-c(5,6,7,8,-3,-5,6,8,5,6,7,8,-3,-5,6,8,5,6,7,8,-3,-5,6,8)
df<-data.frame(date,value)
df2<-data.frame(table(df$date))
解决方案
frollmean
data.table
是来自优秀包的内存效率和快速解决方案。
library(data.table)
# define the window for each element
adaptiveparam <- c(1:6, rep(7, nrow(df)-6))
df$rollmean <- frollmean(df$value, n=adaptiveparam, adaptive = T)
> head(df,8)
date value rollmean
1 2020-09-15 5 5.000000
2 2020-09-14 6 5.500000
3 2020-09-13 7 6.000000
4 2020-09-12 8 6.500000
5 2020-09-15 -3 4.600000
6 2020-09-14 -5 3.000000
7 2020-09-13 6 3.428571
8 2020-09-12 8 3.857143
在这里,我们定义了一个adaptive
向量,指定我们想要对哪个窗口进行平均,对于df$value
.
请注意,分析data.table
语法将是:
df[,rollmean:= frollmean(value, n=c(1:6, rep(7, nrow(df)-6)), adaptive = T)]
编辑:还要注意
library(lubridate)
as_date(c("2020-09-15", "2020-09-14"))
甚至
date <- as_date("2020-09-15")+0:23
也可以创建日期向量,无需as.Date
重复使用。
EDIT2df2
只需修改如下:
adaptiveparam2 <- c(1:6, rep(7, nrow(df2)-6))
df2$rollmean <- frollmean(df2$Freq, n=adaptiveparam2, adaptive = T)
推荐阅读
- python - 如何在 statsmodels 未观察到的组件模型中输入测量噪声?
- c# - The server tag is not well formed. html runat="server" and data-target="#<% Eval("Abbreviation")%>"
- python - Incosistent QLabels with QPixmaps resizing behavior inside horizontal layout while keeping aspect ratio of images
- r - Changing periodicity of panel data in R
- sql - 从值中删除小数
- sql-server - MSSQL: Date is greater than specific date or is null
- schema.org - Make 'Review' belong to 'Product' in Microdata
- c# - 通过ajax将文件发送到另一个动作mvc5 c#
- field - 如何在 Graylog 中添加自定义字段?
- dll - 64 位 Simulink 不生成 64 位 DLL