R最大相同日期,上一个日期和上一个小时值

时间:2018-01-16 17:02:28

标签: r datetime max min

一些基本的数据操作。我用不同的措辞搜索,但找不到多少。

我的数据结构如下。实际上,每小时数据是连续的,但我只包括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

非常感谢任何帮助。感谢

1 个答案:

答案 0 :(得分:0)

使用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