R 如何按日期分组数据,并使用移动平均法平滑数据

R 如何按日期分组数据,并使用移动平均法平滑数据,r,grouping,smoothing,moving-average,R,Grouping,Smoothing,Moving Average,我想把谷歌趋势中的每日数据分组成每周观察数据,并用7天中心移动平均线平滑它们?我该怎么做?按哪个顺序 我应该首先分组数据吗?或者我应该在每日数据上使用居中移动平均线 这是我的数据: dput(multiTimeline) structure(list(day = structure(c(1598400000, 1598486400, 1598572800, 1598659200, 1598745600, 1598832000, 1598918400, 1599004800, 159909120

我想把谷歌趋势中的每日数据分组成每周观察数据,并用7天中心移动平均线平滑它们?我该怎么做?按哪个顺序

我应该首先分组数据吗?或者我应该在每日数据上使用居中移动平均线

这是我的数据:

dput(multiTimeline)
structure(list(day = structure(c(1598400000, 1598486400, 1598572800, 
1598659200, 1598745600, 1598832000, 1598918400, 1599004800, 1599091200, 
1599177600, 1599264000, 1599350400, 1599436800, 1599523200, 1599609600, 
1599696000, 1599782400, 1599868800, 1599955200, 1600041600, 1600128000, 
1600214400, 1600300800, 1600387200, 1600473600, 1600560000, 1600646400, 
1600732800, 1600819200, 1600905600, 1600992000, 1601078400, 1601164800, 
1601251200, 1601337600, 1601424000, 1601510400, 1601596800, 1601683200, 
1601769600, 1601856000, 1601942400, 1602028800, 1602115200, 1602201600, 
1602288000, 1602374400, 1602460800, 1602547200, 1602633600, 1602720000, 
1602806400, 1602892800, 1602979200, 1603065600, 1603152000, 1603238400, 
1603324800, 1603411200, 1603497600, 1603584000, 1603670400, 1603756800, 
1603843200, 1603929600, 1604016000, 1604102400, 1604188800, 1604275200, 
1604361600, 1604448000, 1604534400, 1604620800, 1604707200, 1604793600, 
1604880000, 1604966400, 1605052800, 1605139200, 1605225600, 1605312000, 
1605398400, 1605484800, 1605571200, 1605657600, 1605744000, 1605830400, 
1605916800, 1606003200, 1606089600), class = c("POSIXct", "POSIXt"
), tzone = "UTC"), football = c(36, 36, 41, 60, 45, 38, 38, 39, 
43, 49, 70, 49, 44, 46, 50, 62, 71, 92, 96, 61, 51, 45, 50, 58, 
87, 81, 54, 50, 43, 49, 58, 97, 84, 55, 48, 41, 51, 56, 94, 83, 
51, 47, 46, 49, 62, 97, 84, 51, 55, 51, 47, 52, 96, 79, 51, 49, 
42, 44, 52, 100, 82, 49, 45, 41, 42, 50, 89, 73, 48, 40, 21, 
29, 36, 75, 69, 45, 37, 39, 45, 51, 87, 69, 47, 48, 43, 37, 45, 
79, 66, 46)), row.names = c(NA, -90L), class = c("tbl_df", "tbl", 
"data.frame"))

数据是从2020年8月26日到2020年11月23日。

我允许自己使用dplyr软件包,使数据操作更容易,而lubidrate软件包使数据管理更容易

代码是:

library(dplyr)
library(lubridate)

df2 <- df %>%
  mutate(week = week(day)) %>%
  group_by(week) %>%
  summarise(average = mean(football))
您可以使用zoo包中的rollmean作为一行程序来完成所有这一切

multiTimeline$滚动一个tible:90 x 3 >日间足球赛 > >1202-08-26 00:00:00 36北美 >2020-08-27 00:00:00 36北美 >3 2020-08-28 00:00:00 41北美 > 4 2020-08-29 00:00:00 60 42 > 5 2020-08-30 00:00:00 45 42.4 > 6 2020-08-31 00:00:00 38 43.4 > 7 2020-09-01 00:00:00 38 44.6 > 8 2020-09-02 00:00:00 39 46 > 9 2020-09-03 00:00:00 43 46.6 > 10 2020-09-04 00:00:00 49 47.4 > ... 还有80多行 如果您想选择从星期六到星期五的每周平滑平均值,只需使用过滤器仅选择星期二。这将为您提供从上周六到下周五的7天平均值

multiTimeline%>%filterlubridate::wdayday==3 >一个tibble:12x3 >日间足球赛 > > 1 2020-09-01 00:00:00 38 44.6 > 2 2020-09-08 00:00:00 46 56 > 3 2020-09-15 00:00:00 51 64.7 > 4 2020-09-22 00:00:00 50 60.3 > 5 2020-09-29 00:00:00 48 61.7 > 6 2020-10-06 00:00:00 47 61.7 > 7 2020-10-13 00:00:00 55 62.4 > 8 2020-10-20 00:00:00 49 59 > 9 2020-10-27 00:00:00 45 58.4 > 10 2020-11-03 00:00:00 40 48 > 11 2020-11-10 00:00:00 37 51.6 > 12 2020-11-17 00:00:00 48 53.7 为了显示这是您想要的,我们可以使用ggplot绘制数据和平均线:

ggplotmultiTimeline、aesday、football+ 几何线+ geom_linedata=multiTimeline%>%FilterRubridate::wdayday==3, aesy=滚动,col=红色,lty=2,尺寸=1.5
您可以使用共享数据吗dput@KarthikS嗨,我粘贴我的数据的屏幕如果你使用dput,我们可以将它复制到R并自己操作它,看看我们所说的是否真的有效…好的,完成了,我是新来的椽子使用移动平均变量滚动仍然是每日周期。如何获取星期六到星期五的每周数据?@Azsb只需过滤,以便只取每个星期二的7天滚动平均值。这将为您提供从上周六到下周五的7天平均值。查看我的更新。周数据是否平滑?如果日常数据中有噪音怎么办?lubridate的week函数是否平滑我的数据以避免一次性冲击?week函数选择周。正如我所说,平滑发生是因为它取了每周的平均值。例如,这正是用于新冠病毒数据的方法。
> df2
# A tibble: 13 x 2
    week average
   <dbl>   <dbl>
 1    35    42  
 2    36    48.6
 3    37    69  
 4    38    60.7
 5    39    62  
 6    40    60.4
 7    41    63.4
 8    42    60.7
 9    43    59.1
10    44    54.7
11    45    44.6
12    46    55.1
13    47    52.7