【问题标题】:R Select date range over multiple years and calculate mean of valuesR选择多年的日期范围并计算值的平均值
【发布时间】:2020-07-27 18:42:46
【问题描述】:

我有一个数据框,每小时数据运行超过 5 年。我想计算几年内两个日期(例如,3 月 15 日至 4 月 15 日)之间的值的每小时平均值(即一天中每个小时的平均值,1:24),并将其与每小时去年的平均值。

以下是数据示例:

start = as.POSIXct(strptime("2011-01-01 01:00", "%Y-%m-%d %H:%M"))
end   = as.POSIXct(strptime("2016-01-01 01:00", "%Y-%m-%d %H:%M"))
df = data.frame(DateTime = seq(from = start, to = end,by = "hours"))
df$value = runif(nrow(df))

Start_Period = "03-15"
End_Period = "04-15"

输出应如下所示:

Hour   mean(2011-2014) mean(2015)
1      0.3             0.5
...
24     0.8             0.6

【问题讨论】:

  • 如果开始是03-15,你需要2011-2014的平均值
  • 2011-03-15 到 2011-04-15、2012-03-15 到 2012-04-15、2013-03-15 到 2013-04-15、2014-03 的平均值-15 至 2014 年 4 月 15 日。与 2015-03-15 至 2015-04-15 的平均值相比
  • 03-15 的意思是年日而不是年月?
  • 年月日:2011 年 3 月 15 日至 2011 年 4 月 15 日...
  • @llik 请检查以下解决方案是否有效

标签: r datetime


【解决方案1】:

我们可以filter根据'开始','结束'日期,然后按'小时''年'分组,得到mean

library(lubridate)
library(dplyr)   
df %>%
    filter((day(DateTime) >= 15 & month(DateTime) == 3)|
          (day(DateTime) <= 15 & month(DateTime) ==  4))   %>% 
    group_by(hour = hour(DateTime), year = year(DateTime)) %>% 
    summarise(value = mean(value))

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 2016-11-08
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    相关资源
    最近更新 更多