如何计算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