Рассчитать среднее значение значений, которые попадают между 2 дат - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть 2 кадра данных. Одним из них является список случайных событий. У него есть столбец даты и столбец значений.

df1 = data.frame(date = c(as.Date('2020-01-01'), as.Date('2020-02-02'), as.Date('2020-03-01')),
                 value = c(1,5,9))

У меня есть другой фрейм данных, который является ежедневной записью. У него тоже есть столбец даты и столбец значений.

set.seed(1)
df2 = data.frame(date = seq.Date(from = as.Date('2020-01-01'), to = as.Date('2020-04-01'), by = 1),
                 value = rnorm(92))

Я хочу создать новый столбец в df1, который представляет собой среднее значение df2 $ от текущей даты строки до следующего значения даты (не включая второе значение, поэтому в этом примере первое новое значение будет средним значениями от df2 строки 1 до строки 32, где строка 33 - строка, соответствующая df1 $ date [2]). Результирующий фрейм данных будет выглядеть следующим образом:

        date value value_new
1 2020-01-01     1 0.1165512
2 2020-02-02     5 0.0974052
3 2020-03-01     9 0.1241778

Но я понятия не имею, как это указать. Кроме того, я бы предпочел, чтобы последнее значение было средним для любых данных, выходящих за пределы последнего значения df1 $ date, но я бы также принял NA.

1 Ответ

1 голос
/ 19 апреля 2020

Мы можем объединить df2 с df1, fill NA значениями с предыдущими значениями и получить mean из value_new столбца.

library(dplyr)

df2 %>% 
  rename(value_new = value) %>%
  left_join(df1, by = 'date') %>%
  tidyr::fill(value) %>%
  group_by(value) %>%
  summarise(date = first(date),
            value_new = mean(value_new))


# A tibble: 3 x 3
#   value date       value_new
#   <dbl> <date>       <dbl>
#1     1 2020-01-01    0.117 
#2     5 2020-02-02    0.0974
#3     9 2020-03-01    0.124 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...