L oop за период усреднения в выражении dplyr - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь вычислить вариации скользящих средних периодов в выражении R dplyr.

    library(dplyr)

    data <- tibble(a=seq(1:1000), b=runif(1000), c=rep(c('x','y','Z','q'), 250))

    # Rolling mean calculation
    augment <- data %>% group_by(c) %>% mutate(mean = rollmean(a, 10, na.pad=TRUE, align='left')) %>%  
           ungroup() %>% drop_na() %>% group_by(c)  %>% dplyr::summarize(cor = cor(mean,b)) %>% 
           mutate(ndays = 10)

То, что я хотел бы сделать, это l oop перебрать / перебрать период прокрутки 10 и заменить 10 на seq (10,35).

Этот вывод Вышеприведенное утверждение выглядит следующим образом:

# A tibble: 4 x 3
  c         cor ndays
  <chr>   <dbl> <dbl>
1 q      0.0107    10
2 x      0.0118    10
3 y     -0.0908    10
4 Z     -0.0508    10

Требуемый вывод представляет собой таблицу с записями по дням для каждого из периодов усреднения от 10 до 35 и соответствующей корреляцией.

Я попытался вставить оператор преобразования добавить переменную ndays, но размеры не верны. Различные итерации в этой попытке не сработали.

Как этого достичь в dplyr и связанных пакетах?

Спасибо!

1 Ответ

3 голосов
/ 02 апреля 2020

Быстрое, что вы можете сделать, это использовать purrr, чтобы применить функцию к каждому значению от 10 до 35:

library(tidyverse)
library(zoo)

data <- tibble(a=seq(1:1000), b=runif(1000), c=rep(c('x','y','Z','q'), 250))

10:35 %>% 
  map_df(~{
    data %>% 
      group_by(c) %>%
      mutate(mean = rollmean(a, .x, na.pad=TRUE, align='left')) %>%  
      ungroup() %>% 
      drop_na() %>% 
      group_by(c)  %>% 
      dplyr::summarize(cor = cor(mean,b)) %>% 
      mutate(ndays = .x)
  })
#> # A tibble: 104 x 3
#>    c         cor ndays
#>    <chr>   <dbl> <int>
#>  1 q      0.0519    10
#>  2 x     -0.123     10
#>  3 y      0.0347    10
#>  4 Z     -0.116     10
#>  5 q      0.0571    11
#>  6 x     -0.111     11
#>  7 y      0.0379    11
#>  8 Z     -0.124     11
#>  9 q      0.0498    12
#> 10 x     -0.103     12
#> # … with 94 more rows

Создано в 2020-04-02 Представить пакет (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...