将每小时数据聚合到R中缺少值的每日聚合中

时间:2017-07-03 00:28:58

标签: r max aggregate

[在此处输入图像说明] [1] [在此处输入图像说明] [2]我有一个数据框“RH”,每小时数据,我想将其转换为每日最大和最小数据。这段代码非常有用[问题]:Aggregating hourly data into daily aggregates

RH$Date <- strptime(RH$Date,format="%y/%m/%d)
RH$day <- trunc(RH$Date,"day")

require(plyr)

x <- ddply(RH,.(Date),
  summarize,
  aveRH=mean(RH),
  maxRH=max(RH),
  minRH=min(RH)
)

但我的前5年数据是3小时数据而不是每小时。那些年没有结果。有什么建议吗?提前谢谢。

'data.frame': 201600 obs. of 3 variables: $ Date: chr "1985/01/01" "1985/01/01" "1985/01/01" "1985/01/01" ... $ Hour: int 1 2 3 4 5 6 7 8 9 10 ... $ RH : int NA NA 93 NA NA NA NA NA 79 NA ...

1 个答案:

答案 0 :(得分:1)

您提供的链接是旧链接。代码仍然非常好并且可以使用,但这是使用dplyrlubridate

的更现代的版本
df <- read.table(text='date_time value
"01/01/2000 01:00" 30
"01/01/2000 02:00" 31
"01/01/2000 03:00" 33
"12/31/2000 23:00" 25',header=TRUE,stringsAsFactors=FALSE)

library(dplyr);library(lubridate)
df %>%
  mutate(date_time=as.POSIXct(date_time,format="%m/%d/%Y %H:%M")) %>%
  group_by(date(date_time)) %>%
  summarise(mean=mean(value,na.rm=TRUE),max=max(value,na.rm=TRUE),
            min=min(value,na.rm=TRUE))

  `date(date_time)`     mean   max   min
             <date>    <dbl> <dbl> <dbl>
1        2000-01-01 31.33333    33    30
2        2000-12-31 25.00000    25    25

修改  由于已经有一个日期列,这应该有效:

RH %>% 
 group_by(Date) %>% 
 summarise(mean=mean(RH,na.rm=TRUE),max=max(RH,na.rm=TRUE), 
           min=min(RH,na.rm=TRUE))