首页 > 解决方案 > 如何为小时数据创建日平均函数

问题描述

我有 3 个月(6 月、7 月、8 月)的每小时数据,我想显示三个月期间每天小时的平均值(例如,从第 1 天开始的所有数据的平均值,从一天一小时开始的所有数据的平均值2等)。我开始编写函数,但我仍在学习编写函数和循环的最佳方法来做我需要的事情。我的数据确实包含 NA 值,但它是所有 3 个月 24 小时/天的完整数据集。My current time vector is in Julian day/decimal day so hours for June 1 look like: 152.0000 152.0417 152.0833 152.1250 152.1667 152.2083 152.2500 152.2917 152.3333 152.3750 152.4167 152.4583 152.5000 152.5417 152.5833 152.6250152.6667 152.7083 152.7500 152.7917 152.8333 152.8750 152.9167 152.9583, where 152.0000 is June 1 (朱利安第 152 天)上午 12 点,依此类推。理想情况下我' 我希望该函数返回 24 个值,这些值是每小时的平均值。最后,我还想将中位数、标准差和标准误差合并到这个函数中。到目前为止我确实写了一些代码,但我真的不知道我写的是否正确,所以任何帮助将不胜感激!

# x is hourly data
# t is time vector, for my data I have Julian Decimal Day 
diurnal_avg <- function(x,t){ # input hourly and hourly time data
  dayhrvec <- rep(1:24,length.out=t)
  hr1points <- which(dayhrvec %in% 1)
}

标签: rfunctionaverage

解决方案


这是一个 dplyr 方法:

library(dplyr)
hourly_data_frame %>%
  # Optional, for check: Convert day num to day of year
  mutate(day = floor(dates) + as.Date("2019-01-01") - 1) %>%
  # Convert decimal part of dates to hour of day
  mutate(hour = (dates %% 1) * 24) %>%
  # Summary time!
  group_by(hour) %>%
  summarize(avg_value = mean(values),
            median    = median(values),
            std_dev   = sd(values))
## A tibble: 24 x 4
#    hour avg_value median std_dev
#   <dbl>     <dbl>  <dbl>   <dbl>
# 1 0          4.89   4.82   0.909
# 2 1.000      4.89   5.10   1.19 
# 3 2.         4.68   4.93   0.850
# 4 3          5.26   5.16   0.937
# 5 4.00       5.36   5.46   0.949
# 6 5.         5.05   5.10   0.883
# 7 6          5.13   5.09   0.851
# 8 7.00       5.14   5.21   0.887
# 9 8.         5.09   5.16   0.920
#10 9          5.04   4.84   1.11 
## ... with 14 more rows

样本数据

dates <- c(152 + 0:999/24)
hourly_data_frame <- data.frame(
  dates = dates,
  values = rnorm(1000, 5, 1)
)

推荐阅读