首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中计算一年数据集上的8小时滚动平均值?

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

Stack Overflow用户
提问于 2018-01-21 03:06:45
回答 1查看 479关注 0票数 0

我正在尝试从这个源重新采样每小时一次的臭氧测量数据集- https://aqs.epa.gov/aqsweb/airdata/hourly_44201_2016.zip

下面是数据的头部:

代码语言:javascript
复制
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创建了一个datetime:

代码语言:javascript
复制
df$date_time = ymd_hm(paste(df$Date.Local, df$Time.Local))

然后,我想要做的是将Sample.Measurement数据重新采样为8小时滚动平均值。从那里,我想选择每天的最大值。

在Pandas中,使用resample()方法这将是微不足道的。

我如何在R- Dplyr中做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2018-01-21 04:38:55

您可以使用zoo包中的rollmean以及dplyr中的group_bysummarise,如下所示。对答案进行了编辑,使您可以获得每一天和每个月的最大值。如果您的数据涵盖的时间超过一年,请同时创建一个year列(只需取消对mutate调用中的第三行的注释),然后创建group_by daymonthyear

代码语言:javascript
复制
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

参数align = "center"是默认值,因此不需要。我只是想让你注意到,你的结果可能取决于它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48360023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档