Использование dplyr :: mutate между двумя фреймами данных для создания столбца на основе диапазона дат
Прямо сейчас у меня есть два кадра данных. Одна содержит более 11 миллионов строк даты начала, окончания и других переменных. Второй кадр данных содержит суточные значения дней нагревания (в основном, измерение температуры).
set.seed(1)
library(lubridate)
date.range <- ymd(paste(2008,3,1:31,sep="-"))
daily <- data.frame(date=date.range,value=runif(31,min=0,max=45))
intervals <- data.frame(start=daily$date[1:5],end=daily$date[c(6,9,15,24,31)])
В действительности мой ежедневный фрейм данных имеет каждый день в течение 9 лет, а мой интервал данных содержит записи, которые охватывают произвольные даты в этом периоде времени. То, что я хотел сделать, это добавить колонку к моемуintervals
датафрейм называетсяnhdd
которые суммируются по значениям за день, соответствующим этому временному интервалу (исключая конец).
Например, в этом случае первая запись этого нового столбца будет
sum(daily$value[1:5])
а второй будет
sum(daily$value[2:8]) and so on.
Я пытался использовать следующий код
intervals <- mutate(intervals,nhdd=sum(filter(daily,date>=start&date<end)$value))
Это не работает, и я думаю, что это может быть связано с неправильной ссылкой на столбцы, но я не уверен, куда идти.
Я бы очень хотел использоватьdplyr
чтобы решить это, а не цикл, потому что 11 миллионов строк займет достаточно много времени, используя dplyr. Я пытался использовать большеlubridate
но dplyr, похоже, не поддерживает класс Period.
Изменить: я на самом деле использую даты изas.Date
сейчас вместоlubridate
но основной вопрос о том, как обратиться к другому фрейму данных изнутриmutate
все еще стоит