【问题标题】:From half-hour to hourly data从半小时到每小时的数据
【发布时间】:2021-10-24 07:53:19
【问题描述】:

我的数据集包含每 30 分钟进行一次的观察。基本上,我希望将 01:00:00 作为新时间; 02/01/2019 作为日期示例以及 00:00:00-00:30:0000:30:00-01:00 之间的测量值之和: 00 作为输出

time          variable            value
01:00:00      02/01/2019          234.3 (example)

如何将我的数据汇总到 1 小时?

样本数据:仅选择前 300 个

structure(list(time = structure(c(1800, 3600, 5400, 7200, 9000, 
    10800, 12600, 14400, 16200, 18000, 19800, 21600, 23400, 25200, 
    27000, 28800, 30600, 32400, 34200, 36000, 37800, 39600, 41400, 
    43200, 45000, 46800, 48600, 50400, 52200, 54000, 55800, 57600, 
    59400, 61200, 63000, 64800, 66600, 68400, 70200, 72000, 73800, 
    75600, 77400, 79200, 81000, 82800, 84600, 86400, 1800, 3600, 
    5400, 7200, 9000, 10800, 12600, 14400, 16200, 18000, 19800, 21600, 
    23400, 25200, 27000, 28800, 30600, 32400, 34200, 36000, 37800, 
    39600, 41400, 43200, 45000, 46800, 48600, 50400, 52200, 54000, 
    55800, 57600, 59400, 61200, 63000, 64800, 66600, 68400, 70200, 
    72000, 73800, 75600, 77400, 79200, 81000, 82800, 84600, 86400, 
    1800, 3600, 5400, 7200, 9000, 10800, 12600, 14400, 16200, 18000, 
    19800, 21600, 23400, 25200, 27000, 28800, 30600, 32400, 34200, 
    36000, 37800, 39600, 41400, 43200, 45000, 46800, 48600, 50400, 
    52200, 54000, 55800, 57600, 59400, 61200, 63000, 64800, 66600, 
    68400, 70200, 72000, 73800, 75600, 77400, 79200, 81000, 82800, 
    84600, 86400, 1800, 3600, 5400, 7200, 9000, 10800, 12600, 14400, 
    16200, 18000, 19800, 21600, 23400, 25200, 27000, 28800, 30600, 
    32400, 34200, 36000, 37800, 39600, 41400, 43200, 45000, 46800, 
    48600, 50400, 52200, 54000, 55800, 57600, 59400, 61200, 63000, 
    64800, 66600, 68400, 70200, 72000, 73800, 75600, 77400, 79200, 
    81000, 82800, 84600, 86400, 1800, 3600, 5400, 7200, 9000, 10800, 
    12600, 14400, 16200, 18000, 19800, 21600, 23400, 25200, 27000, 
    28800, 30600, 32400, 34200, 36000, 37800, 39600, 41400, 43200, 
    45000, 46800, 48600, 50400, 52200, 54000, 55800, 57600, 59400, 
    61200, 63000, 64800, 66600, 68400, 70200, 72000, 73800, 75600, 
    77400, 79200, 81000, 82800, 84600, 86400, 1800, 3600, 5400, 7200, 
    9000, 10800, 12600, 14400, 16200, 18000, 19800, 21600, 23400, 
    25200, 27000, 28800, 30600, 32400, 34200, 36000, 37800, 39600, 
    41400, 43200, 45000, 46800, 48600, 50400, 52200, 54000, 55800, 
    57600, 59400, 61200, 63000, 64800, 66600, 68400, 70200, 72000, 
    73800, 75600, 77400, 79200, 81000, 82800, 84600, 86400, 1800, 
    3600, 5400, 7200, 9000, 10800, 12600, 14400, 16200, 18000, 19800, 
    21600), class = c("hms", "difftime"), units = "secs"), variable = c("02/01/2019", 
    "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", 
    "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", 
    "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", 
    "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", 
    "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", 
    "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", 
    "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", 
    "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", 
    "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", "02/01/2019", 
    "02/01/2019", "02/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", 
    "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", 
    "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", 
    "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", 
    "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", 
    "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", 
    "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", 
    "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", 
    "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", 
    "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", "03/01/2019", 
    "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", 
    "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", 
    "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", 
    "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", 
    "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", 
    "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", 
    "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", 
    "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", 
    "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", "04/01/2019", 
    "04/01/2019", "04/01/2019", "04/01/2019", "05/01/2019", "05/01/2019", 
    "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", 
    "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", 
    "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", 
    "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", 
    "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", 
    "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", 
    "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", 
    "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", 
    "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", "05/01/2019", 
    "05/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", 
    "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", 
    "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", 
    "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", 
    "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", 
    "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", 
    "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", 
    "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", 
    "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", 
    "06/01/2019", "06/01/2019", "06/01/2019", "06/01/2019", "07/01/2019", 
    "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", 
    "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", 
    "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", 
    "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", 
    "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", 
    "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", 
    "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", 
    "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", 
    "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", "07/01/2019", 
    "07/01/2019", "07/01/2019", "08/01/2019", "08/01/2019", "08/01/2019", 
    "08/01/2019", "08/01/2019", "08/01/2019", "08/01/2019", "08/01/2019", 
    "08/01/2019", "08/01/2019", "08/01/2019", "08/01/2019"), value = c(0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0)), row.names = c(NA, -300L), class = c("tbl_df", 
    "tbl", "data.frame"))

【问题讨论】:

  • 我无法让您的dput 工作。你修好了还是我错过了什么?
  • 你想如何聚合它?作为每对观察值的平均值?或者,您是否想要一条通过所有点的平滑曲线,然后您可以从中提取小时值?或者,您只是想每隔一行提取一次?

标签: r dataframe


【解决方案1】:

我有一个答案,使用{lubridate}

library(lubridate)

a_df %>%
  mutate(datetime = lubridate::dmy_hms(str_c(variable, time))) %>% 
  mutate(duration_elapsed = lubridate::interval(datetime[1], datetime),
         duration_elapsed = as.duration(duration_elapsed)) %>% 
  mutate(hourly_group = duration_elapsed %/% dhours()) %>% 
  
  glimpse() %>% 
  group_by(hourly_group) %>% 
  summarise(
    value = sum(value),
    time = last(time),
    variable = last(variable),
    datetime = last(datetime)
  ) %>% 
  # select(-hourly_group, -time, -variable) %>%
  select(-hourly_group) %>%
  
  print(width = Inf, n = 50)

请注意,a_df 是您提供的数据框。

这应该可以工作,并且如果您缺少数字,它应该很健壮, 等等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多