У меня есть данные, записанные с датчика дождя. Записывает события 0,2 л / м2 и дату, когда они происходят. После небольшой обработки мои данные выглядят так:
head(df)
V2 V3 V4
1 2018-10-08 11:54:43 1 0.2
2 2018-10-08 12:49:21 2 0.2
3 2018-10-08 15:55:33 3 0.2
4 2018-10-08 16:43:37 4 0.2
5 2018-10-08 16:47:41 5 0.2
6 2018-10-08 16:56:44 6 0.2
обратите внимание, что столбец V2 - это дата, когда произошло событие, V3 - просто совокупный подсчет событий, и я добавил столбец V4 со значениемл / м2 по событию.
Я хочу суммировать значения столбца V4 в регулярной последовательности дат, скажем, каждый час (или каждый день, или любой другой временной интервал), заполняя "нулями"эти временные интервалы без событий
Чтобы получить что-то вроде:
date rain
1 2018-10-08 11:00:00 0.2
2 2018-10-08 12:00:00 0.2
3 2018-10-08 13:00:00 0.0
4 2018-10-08 14:00:00 0.0
5 2018-10-08 15:00:00 0.2
6 2018-10-08 16:00:00 0.6
Я решил проблему, но очень запутанно (см. код ниже). Есть ли простой способ сделать это?
df$date<-round.POSIXt(df$V2, units = "hour")
library(xts)
df.xts <- xts(df$V4,as.POSIXct(df$date))
hourly<-period.apply(df.xts,endpoints(df$date,"hours"),sum)
hourly<-as.data.frame(hourly)
hourly$date<-as.POSIXct(rownames(hourly))
ref<- data.frame(date=seq.POSIXt(from=min(df$date),to=max(df$date),by="hour"))
all<-merge(hourly,ref,by="date",all.y = TRUE)
all$V1[is.na(all$V1)]<-0