Я немного поиграл, и вот что я придумал:
ОБНОВЛЕНИЕ: Последний ответ не был практически осуществимым.Отзывов не было, но я все же меняю их.
library(zoo)
library(dplyr)
df %>%
group_by(variable, date) %>%
mutate(minimum = rollapply(value, width = 4, FUN = mean, fill = NA, align = "right"),
sd = rollapply(value, width = 4, FUN = sd, fill = NA, align = "right")) %>%
slice(which.min(minimum))
# A tibble: 2 x 10
# Groups: variable, date [2]
variable year month day hr min date value minimum sd
<fct> <int> <int> <int> <int> <int> <fct> <int> <dbl> <dbl>
1 building_a 2018 6 2 3 0 6/2/2018 12 12.8 0.5
2 building_b 2018 6 2 2 30 6/2/2018 29 33.2 2.87
Однако идея остается прежней.В функции rollapply()
можно указать n
последовательных строк с помощью аргумента width=
.4
означает в этом случае 4 * 15 minutes = 1 hour
, но может быть любое количество четверти часа.И он вычисляет «скользящее среднее» value
в каждой строке, оглядываясь назад width
строк.
Это должно быть сделано, я надеюсь.