Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算R中全年数据集的8小时滚动平均值?_R_Dplyr_Lubridate - Fatal编程技术网

如何计算R中全年数据集的8小时滚动平均值?

如何计算R中全年数据集的8小时滚动平均值?,r,dplyr,lubridate,R,Dplyr,Lubridate,我正试图从这个来源对每小时臭氧测量数据集进行重新采样- 以下是数据的标题: structure(list(date_time = structure(c(1456844400, 1456848000, 1456851600, 1456855200, 1456858800, 1456862400, 1456866000, 1456869600, 1456873200, 1456880400, 1456884000, 1456887600, 1456891200, 1456894800, 14

我正试图从这个来源对每小时臭氧测量数据集进行重新采样-

以下是数据的标题:

structure(list(date_time = structure(c(1456844400, 1456848000, 
1456851600, 1456855200, 1456858800, 1456862400, 1456866000, 1456869600, 
1456873200, 1456880400, 1456884000, 1456887600, 1456891200, 1456894800, 
1456898400, 1456902000, 1456905600, 1456912800, 1456916400, 1456920000, 
1456923600, 1456927200, 1456930800, 1456934400, 1456938000, 1456941600, 
1456945200, 1456948800, 1456952400, 1456956000), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), Sample.Measurement = c(0.041, 0.041, 
0.042, 0.041, 0.038, 0.038, 0.036, 0.035, 0.029, 0.026, 0.03, 
0.03, 0.028, 0.027, 0.025, 0.023, 0.025, 0.034, 0.036, 0.038, 
0.041, 0.042, 0.043, 0.043, 0.041, 0.033, 0.01, 0.01, 0.011, 
0.007)), .Names = c("date_time", "Sample.Measurement"), row.names = c(NA, 
30L), class = "data.frame")
我将本地日期和时间列组合在一起,使用Lubridate创建了一个日期时间:

df$date_time = ymd_hm(paste(df$Date.Local, df$Time.Local))
然后我想做的是对样本进行重采样。测量数据转换成8小时的滚动平均值。然后,我想从中选择每天的最大值

在Pandas中,使用重采样方法是很简单的

如何在R-Dplyr中实现这一点?

您可以使用zoo软件包中的rollmean和group by,并从Dplyr中总结如下。编辑答案,使您可以获得每天和每月的最大值。如果您的数据覆盖的时间超过一年,那么也可以创建一个年列,只需取消对mutate调用中第三行的注释,然后按天、月和年分组

参数align=center是默认值,因此没有必要。我只是想让您注意到,您的结果可能取决于此。

请阅读。包括易于复制粘贴的示例数据,使其他人更容易帮助您。
library(zoo)
library(dplyr)
library(lubridate)
df %>% 
 mutate(day = as.factor(day(date_time)),
        month = as.factor(month(date_time),
        #year = as.factor(year(date_time)),
        rolling_mean = rollmean(.$Sample.Measurement,
                                k = 8,
                                fill = NA,
                                align = "center")) %>% 
 group_by(day, month) %>% 
 summarise(max_day = max(rolling_mean, na.rm = TRUE)) %>% 
 ungroup()
 # A tibble: 2 x 3
   day   month max_day
 <fct> <fct>   <dbl>
 1 1     3      0.0390
 2 2     3      0.0398