同一日期、前一日期和前一小时值的 R 最大值

R Max of Same Date, Previous Date, and Previous Hour Value

几个基本的数据操作。我用不同的措辞进行搜索,但找不到太多。

我的数据结构如下。实际上每小时数据是连续的,但我只是以4行为例。

start <- as.POSIXlt(c('2017-1-1 1:00','2017-1-1 2:00','2017-1-2 1:00','2017-1-2 2:00'))
values <- as.numeric(c(2,5,4,3))
df <- data.frame(start,values)
df

            start     values
1 2017-01-01 01:00:00      2
2 2017-01-01 02:00:00      5
3 2017-01-02 01:00:00      4
4 2017-01-02 02:00:00      3

我想添加几列:
1) 显示当天最大值
2) 显示前一天的最大值
3) 显示前一小时的值。

目标是得到如下输出:

MaxValueDay <- as.numeric(c(5,5,4,4))
MaxValueYesterday <- as.numeric(c(NA,NA,5,5))
PreviousHourValue <- as.numeric(c(NA,2,NA,4))
df2 <- data.frame(start,values,MaxValueDay,MaxValueYesterday,PreviousHourValue)  
df2

            start     values MaxValueDay MaxValueYesterday PreviousHourValue
1 2017-01-01 01:00:00      2           5                NA                NA
2 2017-01-01 02:00:00      5           5                NA                 2
3 2017-01-02 01:00:00      4           4                 5                NA
4 2017-01-02 02:00:00      3           4                 5                 4

如有任何帮助,我们将不胜感激。谢谢

使用 dplyrmagrittrlubridate 包的解决方案:

library(dplyr)
library(magrittr)
library(lubridate)
df %>% 
  within(MaxValueDay <- sapply(as.Date(start), function (x) max(df$values[which(x==as.Date(start))]))) %>%
  within(MaxValueYesterday <- MaxValueDay[sapply(as.Date(start)-1, match, as.Date(start))]) %>%
  within(PreviousHourValue <- values[sapply(start-hours(1), match, start)])

#                 start values MaxValueDay MaxValueYesterday PreviousHourValue
# 1 2017-01-01 01:00:00      2           5                NA                NA
# 2 2017-01-01 02:00:00      5           5                NA                 2
# 3 2017-01-02 01:00:00      4           4                 5                NA
# 4 2017-01-02 02:00:00      3           4                 5                 4