如何将分钟数据转换为每小时平均数据

时间:2012-09-11 01:46:04

标签: r time-series

我有一周的数据,每5秒读一次。下面是一个数据示例。

9/1/2012 00:00:00    1
9/1/2012 00:00:05    2
9/1/2012 00:00:10    3

我想计算每一天的每小时平均值。然后制作一个“平均每小时读数与小时数”的多线图,其中的线代表不同的日期。

我在这里的是每周平均值

data$date = as.POSIXct(strptime(data$date, 
                  format = "%d/%m/%Y %H:%M","GMT")) 
means <- aggregate(data["nox"], format(data["date"],"%Y-%U"),
                 mean, na.rm = TRUE) 

对于每日平均值,它是

data$date = as.POSIXct(strptime(data$date, 
                 format = "%d/%m/%Y %H:%M","GMT"))
means <- aggregate(data["nox"], format(data["date"],"%Y-%j"),
                 mean, na.rm = TRUE) 

任何人都知道如何计算每天的每小时平均值。

3 个答案:

答案 0 :(得分:8)

我喜欢@Ddin的答案,但我还记得曾经看过?cut.Date的帮助文件,在这种情况下也可以使用。我已经编制了一些数据,因此您可以在几个小时内看到结果:

set.seed(1)
data <- data.frame(date = seq(from = ISOdatetime(2012, 01, 01, 00, 00, 00),
                              length.out = 4320, by=5),
                   nox = sample(1:20, 4320, replace=TRUE))

hr.means <- aggregate(data["nox"], 
                      list(hour = cut(data$date, breaks="hour")), 
                      mean, na.rm = TRUE)
hr.means
#                  hour      nox
# 1 2012-01-01 00:00:00 10.60694
# 2 2012-01-01 01:00:00 10.13194
# 3 2012-01-01 02:00:00 10.33333
# 4 2012-01-01 03:00:00 10.38194
# 5 2012-01-01 04:00:00 10.51111
# 6 2012-01-01 05:00:00 10.26944

答案 1 :(得分:5)

只需要在by-vector中更改格式规范:

hr.means <- aggregate(dat["V1"], format(dat["date"],"%Y-%m-%d %H"),
             mean, na.rm = TRUE) 
hr.means
#---------
           date V2
1 2012-01-09 00  2

答案 2 :(得分:0)

我从here来到这里,所以我的数据形式略有不同,但是使用lubridate你也可以轻松解析数据格式。

# if you want per date
tbl %>% 
    mutate(date = date(TIME), hour = hour(TIME)) %>% 
    group_by(date, hour) %>% summarise(m = mean(MEASURE))

# if you want per hour over all dates
tbl %>% 
    mutate(hour = hour(TIME)) %>% 
    group_by(hour) %>% summarise(m = mean(MEASURE))

使用可以操作日期/时间的表格中的数据,您可以按日期+小时或每小时在所有日期汇总,如下所示:

library(ggplot2)
tbl %>% 
    mutate(hour = hour(TIME)) %>% 
    group_by(hour) %>% summarise(m = mean(MEASURE)) %>%
    ggplot(aes(x = hour, y = m)) + geom_point() + geom_line()

要使用ggplot2使用点和线绘制它,您可以

 43094433924714.60  42305389712997.10   42051869142057.30   41857066081162.10   41709555393330.50   41567289549908.10   41445508409456.40   41351519393007.90   41285939671446.50   41246739458582.20   41227637000953.50   41221374361160.30   41222070832734.30   41225683762693.20   41229940202366.40   41234197403025.10   41238259341968.60   41242214489820.80   41246250974730.60   41250072955515.30   41253409784178.00   41256148996999.60   41258526183343.50   41260749335391.20   41262757761836.80
相关问题