Интерполяция вложенных данных в R - PullRequest
0 голосов
/ 12 февраля 2019

Я относительный новичок в мурлыканье и вложенности данных, и у меня возникла проблема, которую я не понимаю.По сути, у меня есть ряд прерывистых вертикальных профилей (разделенных по регионам и уровням давления), которые мне нужно интерполировать.Показатель DPUT указан ниже, но мне нужно интерполировать данные с 200, 300, 500, 700 и 1000 до данных, например, seq(100,1000,100).

. Этот вопрос кажется идеальным для nest(), поэтому я попробовал следующее:

OH_Interp <- as.tibble(Spiv.OH) %>%
  group_by(Month, Region) %>%
  nest() %>%
  mutate(interpolation = modify(data, spline,
                                      xout = seq(100,1000,100))) %>%
  select(Month, Region, interpolation) %>%
  unnest()

Я ожидал, что это вернет кадр данных 40x4, отражающий структуру входного кадра данных, с интерполированными данными вместо исходных данных.spline(), кажется, работал правильно, но поскольку структура interpolation не сохранила структуру data, я не могу использовать unnest(), как я ожидал - вместо этого она просто разрушает внутреннюю структуруиз списка interpolation и удваивает длину вывода до размера 8x3.Как сделать так, чтобы вместо этого выводился кадр данных размером 40x4?

Заранее благодарен за помощь!

Соответствующий кадр данных:

структура (list (Pressure)= c (1000л, 900л, 800л, 700л, 500л, 300л, 200л, 1000л, 900л, 800л, 700л, 500л, 300л, 200л, 1000л, 800л, 700л, 500л, 300л, 200л, 1000л, 900л, 800л, 700L, 500L, 300L, 200L), значение = c (8,12, 11,76, 17,14, 20,5, 21,08, 14,2, 11,2, 7,14, 7,59, 7,98, 8,45, 8,72, 8,94, 8,94, 3,24, 4,12, 4,74, 5,36,5,34, 4,26, 3,94, 0,09, 0,09, 0,1, 0,11, 0,12, 0,1, 0,1), Месяц = ​​структура (c (1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c («Январь», «Июль»), класс ="фактор"), регион = структура (c (2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c ("Polar", "Subtropics"), class = "factor")), .Names = c ("Pressure", "Значение "," Месяц "," Регион "), класс =" data.frame ", row.names = c (NA-28L))

Джаред

1 Ответ

0 голосов
/ 12 февраля 2019

Если вы конвертируете вывод сплайна в фрейм данных / таблицу, вы можете легко удалить его:

as.tibble(Spiv.OH) %>%
    group_by(Month, Region) %>%
    nest() %>%
    mutate(interpolation = modify(data, 
                                  function(df, ...) { spline(df, ...) %>% 
                                          as_tibble()
                                  },
                                  xout = seq(100,1000,100))) %>%
    select(Month, Region, interpolation) %>%
    unnest(interpolation)

Вывод:

# A tibble: 40 x 4
   Month   Region         x     y
   <fct>   <fct>      <dbl> <dbl>
 1 January Subtropics   100 10.4 
 2 January Subtropics   200 11.2 
 3 January Subtropics   300 14.2 
 4 January Subtropics   400 18.1 
 5 January Subtropics   500 21.1 
 6 January Subtropics   600 21.9 
 7 January Subtropics   700 20.5 
 8 January Subtropics   800 17.1 
 9 January Subtropics   900 11.8 
10 January Subtropics  1000  8.12
# ... with 30 more rows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...