Как заполнить недостающие данные по дате, предшествующей и следующей за ней в R? - PullRequest
0 голосов
/ 14 ноября 2018

Еще два вопроса по этой теме: A B

Возьмите в качестве примера рис.1, эти данные можно увидеть на 12/12/2016 12: 07 отсутствует.Я хочу использовать предыдущую и следующую строку данных (т. Е. 10.10.2016 10:50 5.73; 24.10.2016 08:53 6.09) для линейной интерполяции этих пропущенных данных (а не среднего значения «5.73» и«6.09», но согласно «дате»).Пример файла данных прилагается ниже:

09/26/2016 11:57    5.42
10/10/2016 10:50    5.73
10/12/2016 12:07    
10/24/2016 08:53    6.09
11/07/2016 11:25    6.43
11/21/2016 13:57    6.33
12/05/2016 14:01    7.97
12/19/2016 13:00    8.47

Вы можете видеть рис.2, мы можем использовать «Trend ()» для достижения этой цели.

=TREND(M22:M23,L22:L23,O22)

Мне было интересно, есть ли полезная функция в R?

Fig-1 Fig-2

1 Ответ

0 голосов
/ 14 ноября 2018

Пример данных:

df <- data.frame(date = mdy_hm(
                    c("10/10/2016 10:50",
                      "10/12/2016 12:07",
                      "10/24/2016 08:53")),
            figure = c(5.73, NA_real_, 6.09))

Использование пакета zoo:

library(zoo)    
library(magrittr)

zoo(df$figure, df$date) %>% 
      na.approx() %>% 
      as.data.frame()

Использование lubridate и dplyr

library(dplyr)
library(lubridate)

df %>% 
   mutate(figure = ifelse(is.na(figure),
                      lag(figure, 1) + (lead(figure, 1) - lag(figure, 1)) *
                      as.numeric(difftime(date, lag(date, 1))) / 
                      as.numeric((difftime(lead(date, 1), date) + difftime(date, lag(date, 1)))),
                      figure)) %>% 
   mutate(figure = round(figure, 2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...