R - Исправление проблемы перехода на летнее время в интервальных данных - PullRequest
0 голосов
/ 01 октября 2019

Я смотрю на некоторые данные о нагрузке на электроэнергию и столкнулся с проблемой DST. Данные выглядят так:

Acct        date          hour  usage
198 2018-03-11T00:00:00Z    0   8976
198 2018-03-11T00:00:00Z    1   6912
198 2018-03-11T00:00:00Z    3   9024
198 2018-03-11T00:00:00Z    4   8976
198 2018-03-11T00:00:00Z    5   8928
198 2018-03-11T00:00:00Z    6   8976
...
260 2018-03-11T00:00:00Z    0   12710.4
260 2018-03-11T00:00:00Z    1   9364.8
260 2018-03-11T00:00:00Z    3   15556.8
260 2018-03-11T00:00:00Z    4   12628.8
260 2018-03-11T00:00:00Z    5   12619.2
260 2018-03-11T00:00:00Z    6   13051.2
260 2018-03-11T00:00:00Z    7   12907.2
260 2018-03-11T00:00:00Z    8   12835.2
...

Как вы видите, в эту дату вступил в силу DST, пропустив час 2 и оставив мне 23 точки данных в день вместо 24. Я надеюсь исправить этовключая отсутствующий час со средним значением использования предыдущего (час 1) и следующего (час 3) часов использования.

Например, для первого действия, я хотел бы иметь:

Acct        date          hour  usage
198 2018-03-11T00:00:00Z    0   8976
198 2018-03-11T00:00:00Z    1   6912
198 2018-03-11T00:00:00Z    2   7968
198 2018-03-11T00:00:00Z    3   9024

Я пишу здесь, так как у меня проблемы с поиском эффективного способа сделать это для всех Аккаунтов (их около 500). Помощь будет принята с благодарностью, спасибо.

1 Ответ

1 голос
/ 01 октября 2019

Один dplyr и tidyr Возможны следующие варианты:

df %>%
 group_by(Acct, date) %>%
 complete(hour = seq(min(hour), max(hour), 1)) %>%
 mutate(usage = if_else(is.na(usage), (lag(usage) + lead(usage))/2, usage))

   Acct date                  hour  usage
   <int> <chr>                <dbl>  <dbl>
 1   198 2018-03-11T00:00:00Z     0  8976 
 2   198 2018-03-11T00:00:00Z     1  6912 
 3   198 2018-03-11T00:00:00Z     2  7968 
 4   198 2018-03-11T00:00:00Z     3  9024 
 5   198 2018-03-11T00:00:00Z     4  8976 
 6   198 2018-03-11T00:00:00Z     5  8928 
 7   198 2018-03-11T00:00:00Z     6  8976 
 8   260 2018-03-11T00:00:00Z     0 12710.
 9   260 2018-03-11T00:00:00Z     1  9365.
10   260 2018-03-11T00:00:00Z     2 12461.
11   260 2018-03-11T00:00:00Z     3 15557.
12   260 2018-03-11T00:00:00Z     4 12629.
13   260 2018-03-11T00:00:00Z     5 12619.
14   260 2018-03-11T00:00:00Z     6 13051.
15   260 2018-03-11T00:00:00Z     7 12907.
16   260 2018-03-11T00:00:00Z     8 12835.
...