【问题标题】:Aggregating hourly data into daily aggregates with missing value in R将每小时数据聚合为 R 中缺失值的每日聚合
【发布时间】:2017-07-03 00:28:57
【问题描述】:

[在此处输入图像描述][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 ...

【问题讨论】:

  • 所以你不希望前五年出现在结果中,或者你需要它们出现,但所有值都应该是NA
  • 您提供的链接是旧的。该代码应该仍然有效,但有更多最近的方法。我们无法解决问题,因为您没有提供数据。您想要一个可以处理您的数据的最新代码示例吗?
  • @PLapointe 同样在这里,我刚刚发现问题来自 6 年前...:(
  • 感谢您的回答。我需要拥有所有年份的最大和最小数据。但此代码将显示前 5 年的 NA,这不是每小时而是 3 小时的数据。我不知道如何用 3 小时数据转换前 5 年和用每小时数据转换 20 年。我的数据周期是 25。
  • @user3575805 我添加了您正在尝试做的“现代”版本。它应该适用于您的数据。

标签: r max aggregate


【解决方案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))

【讨论】:

  • 谢谢。我的数据框有 3 列,日期、小时和 RH。我使用了您的新代码,但对我不起作用。library(dplyr);library(lubridate) RH %&gt;% mutate(Date=as.POSIXct(Date,format="%y/%m/%d")) %&gt;% group_by(date(Date)) %&gt;% summarise(mean=mean(RH,na.rm=TRUE),max=max(RH,na.rm=TRUE), min=min(RH,na.rm=TRUE)) 但通过更改旧代码并添加“na.rm=TRUE”,它起作用了。
  • @user3575805 查看我的编辑。这假设您的 data.frame 调用 RH 并且您有一个 RH 列。
  • 我尝试了新的,但只显示第一行的最大值和最小值不正确。结果是mean max min 1 67.15332 100 10
  • @user3575805 你能在你的问题中添加str(RH) 的结果吗?
  • '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 ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
相关资源
最近更新 更多