Линейная интерполяция R - PullRequest
0 голосов
/ 11 января 2019

У меня есть это data.frame (12x2) с именем df_1, которое представляет месячные значения:

      month    df_test
 [1,]    1 -1.4408567
 [2,]    2 -1.0007642
 [3,]    3  2.1454113
 [4,]    4  1.6935537
 [5,]    5  0.1149219
 [6,]    6 -1.3205144
 [7,]    7  1.0277486
 [8,]    8  1.0323482
 [9,]    9 -0.1442319
[10,]   10 -0.2091197
[11,]   11 -0.6803158
[12,]   12  0.5965196

и это data.frame (8760x2), называемое df_2, где каждая строка представляет значение, связанное с интервалом в один час дня. data.frame содержит почасовые значения за один год:

                   time           df_time
1           2015-01-01 00:00:00 -0.4035650
2           2015-01-01 01:00:00  0.1800579
3           2015-01-01 02:00:00 -0.3770589
4           2015-01-01 03:00:00  0.2573456
5           2015-01-01 04:00:00  1.2000178
6           2015-01-01 05:00:00 -0.4276127
...........................................
                  time                df_time
8755           2015-12-31 18:00:00  1.3540119
8756           2015-12-31 19:00:00  0.4852843
8757           2015-12-31 20:00:00 -0.9194670
8758           2015-12-31 21:00:00 -1.0751814
8759           2015-12-31 22:00:00  1.0097749
8760           2015-12-31 23:00:00 -0.1032468

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

Наконец, мы должны получить data.frame с именем df_3 (8760x2), который интерполировал значения между значениями df_1.

Спасибо за помощь!

1 Ответ

0 голосов
/ 11 января 2019

Здесь сделано с zoo. Я предполагаю, что месячное значение связано с определенной отметкой даты и времени (середина месяца, полночь) - вы должны это сделать. Если вам нужна другая отметка даты и времени, просто измените значение.

library(zoo)
library(dplyr)
library(tidyr)

df_3 <- df_1 %>%
   mutate(time = paste(2015, month, "15 00:00:00", sep = "-"),
          time = as.POSIXct(strptime(time, "%Y-%m-%d %H:%M:%S"))) %>%
   full_join(df_2) %>%
   arrange(time) %>%
   mutate(df_test = na.approx(df_test, rule = 2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...