Downsampling de séries temporais

Oi, pessoal, tudo bem? Tenho um data frame de séries temporais com 24 colunas (que são as séries temporais) que tem 600 linhas cada uma. Precisava fazer a média de 10 em 10 pontos de forma que no final eu tivesse 24 colunas com 60 linhas cada um. Vocês conseguiriam me ajudar?

É possível fazer algo assim, talvez não seja a melhor forma…
A ideia é usar a função ntile que pega uma sequência e quebra em grupos de tamanhos iguais.

library(tidyverse)

x <- matrix(runif(24*600), ncol = 24)
x <- as.data.frame(x)
x$data <- seq(from = as.Date("2020-01-01"), length.out = 600, by ="1 day")

x %>% 
  group_by(g = ntile(row_number(data), n = 60)) %>% 
  summarise_all(mean)
#> # A tibble: 60 x 26
#>        g    V1    V2    V3    V4    V5    V6    V7    V8    V9   V10   V11   V12
#>    <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1     1 0.440 0.596 0.629 0.493 0.413 0.409 0.578 0.410 0.462 0.477 0.671 0.306
#>  2     2 0.395 0.573 0.491 0.399 0.437 0.504 0.496 0.665 0.738 0.762 0.549 0.477
#>  3     3 0.566 0.664 0.653 0.484 0.603 0.484 0.519 0.547 0.511 0.517 0.501 0.587
#>  4     4 0.682 0.663 0.609 0.419 0.526 0.445 0.508 0.343 0.597 0.617 0.398 0.482
#>  5     5 0.546 0.657 0.344 0.544 0.559 0.443 0.545 0.448 0.398 0.631 0.676 0.546
#>  6     6 0.292 0.473 0.424 0.637 0.365 0.459 0.425 0.420 0.484 0.564 0.401 0.309
#>  7     7 0.421 0.319 0.617 0.430 0.444 0.523 0.565 0.543 0.649 0.648 0.454 0.576
#>  8     8 0.435 0.489 0.490 0.530 0.458 0.590 0.445 0.463 0.565 0.557 0.460 0.516
#>  9     9 0.487 0.427 0.481 0.338 0.534 0.506 0.530 0.704 0.337 0.489 0.608 0.421
#> 10    10 0.504 0.534 0.378 0.552 0.672 0.448 0.633 0.413 0.503 0.536 0.518 0.343
#> # … with 50 more rows, and 13 more variables: V13 <dbl>, V14 <dbl>, V15 <dbl>,
#> #   V16 <dbl>, V17 <dbl>, V18 <dbl>, V19 <dbl>, V20 <dbl>, V21 <dbl>,
#> #   V22 <dbl>, V23 <dbl>, V24 <dbl>, data <date>

Created on 2020-05-10 by the reprex package (v0.3.0)

3 curtidas

Poxa, gostei muito da solução! Era exatamente o que eu queria! Obrigado!

1 curtida