r语言plot - 合并两个日常时间序列,总结了转移时间




r画图标注 (2)

我有一个测量(例如太阳辐射)与日期时间变量索引,每小时时间戳。 我想要做的是总结一年中每一天的测量值,并将其与另一个日常数据来源(比如室外平均温度)相匹配。

尽管第二个数据来源已经从第二天的上午8:00到上午8:00已经聚集起来了 。 我知道如何按照标准日总结我的第一个变量,但是我需要从8到8来完成这两项测量。

我的数据的一个例子

set.seed(1L) # to create reproducible data
hourly = data.frame(datetime = seq(from = lubridate::ymd_hm("2017-01-01 01:00"), 
                                   length.out = 168, by = "hour"),
                    value = rpois(168, 10))
daily = data.frame(datetime = seq(from=as.Date("2017-01-01"), length.out = 31, by="day"),
                   value=rnorm(31))

你可以用cut来做,例如:

library(lubridate)
library(dplyr)
brk = seq(ymd_hm(paste(as.Date(min(hourly$datetime) - days(1)), "08:00"), tz= "UTC"), ymd_hm(paste(as.Date(max(hourly$datetime)+ days(1)), "08:00"), tz= "UTC"), by = "24 hours")
hourly$cut <- ymd_hms(cut.POSIXt(hourly$datetime, breaks = brk))
hourly2 <- hourly %>% group_by(cut) %>% summarize(value = sum(value)) 
hourly2$cut <- as.Date(hourly2$cut)
names(hourly2) <- names(daily)
comb <- rbind(hourly2, daily) %>% group_by(datetime) %>% summarize(value = sum(value))

     datetime       value
       <date>       <dbl>
 1 2016-12-31  52.0000000
 2 2017-01-01 241.5612137
 3 2017-01-02 244.3689032
 4 2017-01-03 271.3156334
 5 2017-01-04 253.8221333
 6 2017-01-05 238.5790170
 7 2017-01-06 220.7118064
 8 2017-01-07 167.5018586
 9 2017-01-08  -0.2962494
10 2017-01-09   0.4126310
 ... with 22 more rows

使用dplyr并通过减少8小时来转换一天:

hourly %>% mutate(datetime = as_date(datetime - 8 * hours())) %>%
  rbind(daily) %>%
  group_by(datetime)  %>%
  summarize_all(sum) %>%
  ungroup%>%
  arrange(datetime) 

结果

 A tibble: 32 x 2
     datetime       value
       <date>       <dbl>
 1 2016-12-31  70.0000000
 2 2017-01-01 218.6726454
 3 2017-01-02 244.3821258
 4 2017-01-03 257.7136326
 5 2017-01-04 220.4788443
 6 2017-01-05 230.3729744
 7 2017-01-06 248.5082639
 8 2017-01-07 176.5511818
 9 2017-01-08  -0.8307824
10 2017-01-09  -0.6343781
# ... with 22 more rows






aggregate