У меня есть поминутная серия в течение ряда лет.
Мне нужно вычислить следующее значение для каждой минуты данных:
q <- (Fn-Fd) / Fn </p>
, где Fn - это среднее значение F в ночное время между 12-1 и AM, а Fd - минутная точка данных.
Теперь очевидно, что Fn меняется каждый день, поэтому одним из подходов будет вычисление Fn, возможно, с использованием функции dplyr, и мне потребуется создать какой-то цикл или реорганизовать мой фрейм данных ...
фиктивные данные:
#string of dates for a one month
datetime <- seq(
from=as.POSIXct("2012-1-1 0:00:00", tz="UTC"),
to=as.POSIXct("2012-2-1 0:00:00", tz="UTC"),
by="min"
)
#variable F
F <- runif(44641, min = 0, max =2)
#dataframe
df <- as.data.frame(cbind(datetime,F))
library(lubridate)
#make sure its in "POSIXct" "POSIXt" format
df$datetime <- as_datetime(df$datetime)
Или менее элегантный способ получить Fn сам по себе, в промежутке между первым использованием dplyr - я думаю, что это будет что-то вроде этого:
Fn <- df %>%
filter(between(as.numeric(format(datetime, "%H")), 0, 1)) %>%
group_by(hour=format(datetime, "%Y-%m-%d %H:")) %>%
summarise(value=mean(df$F))
Но я не уверен, что мой синтаксис там правильный? Я вычисляю среднее F между 12 и 1 AM в день?
Тогда я мог бы просто напечатать среднее значение Fn для каждой минуты в день в моем фрейме данных и сделать простой расчет, чтобы получить Q.
Заранее спасибо за совет здесь.