将每小时数据汇总为R中缺少值的每日汇总 [英] Aggregating hourly data into daily aggregates with missing value in R
问题描述
[在此处输入图像描述] [1] [在此处输入图像描述] [2]我有一个数据框 RH,其中包含每小时数据,我想将其转换为每日最大和最小数据。这段代码非常有用[question]:将每小时数据汇总为每日汇总
[enter image description here][1][enter image description here][2]I have a data frame "RH", with hourly data and I want to convert it to daily maximum and minimum data. This code was very useful [question]: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小时数据,所以这些年没有结果。有什么建议吗?谢谢您。
But my first 5 years data are 3 hours data not hourly. so no results for those years. Any suggestion? Thank you in advance.
'data.frame':201600个观测值,包含3个变量:
$日期:chr 1985/01/01 1985 / 01/01/01 1985/01/01 1985/01/01 ...
$小时:int 1 2 3 4 5 6 7 8 9 10 ...
$ RH: int不适用不适用93不适用不适用不适用不适用不适用...
推荐答案
您提供的链接是一个古老的代码。代码仍然非常好,可以正常工作,但是这里的使用 dplyr
和 lubridate
The link you provided is an old one. The code is still perfectly good and would work, but here's a more modern version using dplyr
and lubridate
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
编辑
由于已经有一个日期列,因此应该可以使用:
EDIT Since there's already a date column, this should work:
RH %>%
group_by(Date) %>%
summarise(mean=mean(RH,na.rm=TRUE),max=max(RH,na.rm=TRUE),
min=min(RH,na.rm=TRUE))
这篇关于将每小时数据汇总为R中缺少值的每日汇总的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!