Usando dplyr :: mutate entre dos marcos de datos para crear una columna basada en el rango de fechas
En este momento tengo dos marcos de datos. Uno contiene más de 11 millones de filas de una fecha de inicio, fecha de finalización y otras variables. El segundo marco de datos contiene valores diarios para días de grados de calentamiento (básicamente una medida de temperatura).
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)])
En realidad, mi marco de datos diario tiene todos los días durante 9 años y mi marco de datos de intervalos tiene entradas que abarcan fechas arbitrarias en este período de tiempo. Lo que quería hacer era agregar una columna a miintervals
marco de datos llamadonhdd
que sumaron los valores en diario correspondientes a ese intervalo de tiempo (fin exclusivo).
Por ejemplo, en este caso, la primera entrada de esta nueva columna sería
sum(daily$value[1:5])
y el segundo sería
sum(daily$value[2:8]) and so on.
Intenté usar el siguiente código
intervals <- mutate(intervals,nhdd=sum(filter(daily,date>=start&date<end)$value))
Esto no funciona y creo que podría tener algo que ver con no hacer referencia a las columnas correctamente, pero no estoy seguro de dónde ir.
Realmente me gustaría usardplyr
para resolver esto y no un ciclo porque 11 millones de filas tardarán lo suficiente usando dplyr. Traté de usar más delubridate
pero dplyr no parece admitir la clase Period.
Editar: en realidad estoy usando fechas deas.Date
ahora en lugar delubridate
pero la pregunta básica de cómo referirse a un marco de datos diferente desde dentromutate
sigue en pie