Skip to contents

Computes rolling statistics (mean, sd, median, sum, min, max, var) over a moving window of fixed length. Supports group-wise computation and various alignments.

Usage

roll_apply(data, cols = NULL, window = 3, method = "mean",
           align = "right", group = NULL, date_col = NULL,
           verbose = FALSE)

Arguments

data

A data frame, matrix, or numeric vector.

cols

Column indices or names to process.

window

Window size (number of observations).

method

Statistic to compute: "mean", "sd", "median", "sum", "min", "max", or "var".

align

Alignment of window: "right", "left", or "center".

group

Optional grouping column for group-wise rolling computation.

date_col

Time column (not required, used only to order if provided).

verbose

Logical; if TRUE, prints progress message.

Value

A data frame or vector with rolling statistics.

Examples

roll_apply(data[1:100, c(1, 4, 17:19)], cols = 3:5, window = 5, method = "mean")
#>                    date    monthyear      3.98      4.47      5.01
#> 1   2019-12-31 16:00:00 January 2020        NA        NA        NA
#> 2   2019-12-31 16:10:00 January 2020        NA        NA        NA
#> 3   2019-12-31 16:20:00 January 2020        NA        NA        NA
#> 4   2019-12-31 16:30:00 January 2020  42.97220  74.77850  24.83750
#> 5   2019-12-31 16:40:00 January 2020  42.97220  40.82180  34.77755
#> 6   2019-12-31 16:50:00 January 2020  52.11615  40.82180  34.77755
#> 7   2019-12-31 17:00:00 January 2020  73.37610  40.82180  34.77755
#> 8   2019-12-31 17:10:00 January 2020  73.37610  40.82180  34.77755
#> 9   2019-12-31 17:20:00 January 2020  79.47207   6.86510  44.71760
#> 10  2019-12-31 17:30:00 January 2020  74.83918   6.59120  42.93320
#> 11  2019-12-31 17:40:00 January 2020  79.36553   6.59120  42.93320
#> 12  2019-12-31 17:50:00 January 2020  61.10030   6.59120  42.93320
#> 13  2019-12-31 18:00:00 January 2020  61.10030  10.27050  66.89915
#> 14  2019-12-31 18:10:00 January 2020  60.94050  10.27050  66.89915
#> 15  2019-12-31 18:20:00 January 2020  61.26010  13.94980  90.86510
#> 16  2019-12-31 18:30:00 January 2020  96.11155 120.92290  83.28010
#> 17  2019-12-31 18:40:00 January 2020  96.11155 120.92290  83.28010
#> 18  2019-12-31 18:50:00 January 2020  96.11155 227.89600  75.69510
#> 19  2019-12-31 19:00:00 January 2020  96.11155 227.89600  75.69510
#> 20  2019-12-31 19:10:00 January 2020 132.24300 188.04800  62.45960
#> 21  2019-12-31 19:20:00 January 2020  97.39155 148.20000  49.22410
#> 22  2019-12-31 19:40:00 January 2020  97.39155 148.20000  49.22410
#> 23  2019-12-31 19:50:00 January 2020  97.39155 148.20000  49.22410
#> 24  2019-12-31 20:00:00 January 2020  97.39155 148.20000  49.22410
#> 25  2019-12-31 20:10:00 January 2020  61.26010        NA        NA
#> 26  2019-12-31 20:20:00 January 2020  42.87230  74.60470  24.77970
#> 27  2019-12-31 20:30:00 January 2020  42.92225  74.69160  24.80860
#> 28  2019-12-31 20:40:00 January 2020  42.92225  74.69160  24.80860
#> 29  2019-12-31 20:50:00 January 2020  42.92225  52.20107  32.21547
#> 30  2019-12-31 21:00:00 January 2020  42.92225  52.20107  32.21547
#> 31  2019-12-31 21:10:00 January 2020  69.76180  51.38500  31.94443
#> 32  2019-12-31 21:20:00 January 2020  68.17090  51.66250  45.16057
#> 33  2019-12-31 21:30:00 January 2020  77.68060  56.87195  39.89062
#> 34  2019-12-31 21:40:00 January 2020  77.68060  73.42260  37.51110
#> 35  2019-12-31 21:50:00 January 2020  77.68060  73.42260  37.51110
#> 36  2019-12-31 22:00:00 January 2020  68.24520  74.05565  44.28335
#> 37  2019-12-31 22:10:00 January 2020  96.70000  72.50030  24.08080
#> 38  2019-12-31 22:20:00 January 2020  45.01850  78.33940  26.02020
#> 39  2019-12-31 22:30:00 January 2020  53.13930  78.33940  26.02020
#> 40  2019-12-31 22:40:00 January 2020  62.97943 114.42270  58.60465
#> 41  2019-12-31 22:50:00 January 2020  62.97943 114.42270  58.60465
#> 42  2019-12-31 23:00:00 January 2020  62.54960 114.42270  58.60465
#> 43  2019-12-31 23:10:00 January 2020  68.39330 150.50600  91.18910
#> 44  2019-12-31 23:20:00 January 2020  67.23337 150.50600  91.18910
#> 45  2019-12-31 23:30:00 January 2020  59.52020        NA        NA
#> 46  2019-12-31 23:40:00 January 2020  59.52020        NA        NA
#> 47  2019-12-31 23:50:00 January 2020  59.52020        NA        NA
#> 48  2020-01-01 00:00:00 January 2020  59.52020        NA        NA
#> 49  2020-01-01 00:10:00 January 2020  61.26010        NA        NA
#> 50  2020-01-01 00:20:00 January 2020  61.26010        NA        NA
#> 51  2020-01-01 00:30:00 January 2020  61.26010        NA        NA
#> 52  2020-01-01 00:40:00 January 2020  35.99660  76.50240 111.10200
#> 53  2020-01-01 00:50:00 January 2020  35.99660  76.50240 111.10200
#> 54  2020-01-01 01:00:00 January 2020  35.99660  76.50240 111.10200
#> 55  2020-01-01 01:10:00 January 2020  48.62835  76.50240 111.10200
#> 56  2020-01-01 01:20:00 January 2020  64.04170  76.36745  68.21120
#> 57  2020-01-01 01:30:00 January 2020  78.06425  41.41975  34.17840
#> 58  2020-01-01 01:40:00 January 2020  78.06425  29.93813  37.92977
#> 59  2020-01-01 01:50:00 January 2020  78.06425  29.93813  37.92977
#> 60  2020-01-01 02:20:00 January 2020  94.86840  29.93813  37.92977
#> 61  2020-01-01 02:30:00 January 2020        NA   6.79095  44.23445
#> 62  2020-01-01 02:40:00 January 2020        NA   6.97490  45.43250
#> 63  2020-01-01 02:50:00 January 2020        NA        NA        NA
#> 64  2020-01-01 03:00:00 January 2020        NA        NA        NA
#> 65  2020-01-01 03:10:00 January 2020        NA        NA        NA
#> 66  2020-01-01 03:20:00 January 2020        NA        NA        NA
#> 67  2020-01-01 03:30:00 January 2020 122.52000        NA        NA
#> 68  2020-01-01 03:40:00 January 2020 122.52000        NA        NA
#> 69  2020-01-01 03:50:00 January 2020 122.52000        NA        NA
#> 70  2020-01-01 04:00:00 January 2020 122.52000        NA        NA
#> 71  2020-01-01 04:10:00 January 2020 122.52000        NA        NA
#> 72  2020-01-01 04:20:00 January 2020 129.78600 148.34300  49.27180
#> 73  2020-01-01 04:30:00 January 2020 129.78600 148.34300  49.27180
#> 74  2020-01-01 04:40:00 January 2020 129.78600 148.34300  49.27180
#> 75  2020-01-01 04:50:00 January 2020 129.78600 148.34300  49.27180
#> 76  2020-01-01 05:00:00 January 2020 129.78600 148.34300  49.27180
#> 77  2020-01-01 05:40:00 January 2020        NA        NA        NA
#> 78  2020-01-01 05:50:00 January 2020        NA        NA        NA
#> 79  2020-01-01 06:00:00 January 2020        NA        NA        NA
#> 80  2020-01-01 06:10:00 January 2020        NA        NA        NA
#> 81  2020-01-01 06:20:00 January 2020        NA   6.97490  45.43250
#> 82  2020-01-01 06:30:00 January 2020        NA   6.97490  45.43250
#> 83  2020-01-01 06:40:00 January 2020        NA  14.07895  91.70625
#> 84  2020-01-01 06:50:00 January 2020        NA  14.03590  91.42587
#> 85  2020-01-01 07:00:00 January 2020        NA  14.03590  91.42587
#> 86  2020-01-01 07:10:00 January 2020        NA  17.56640 114.42255
#> 87  2020-01-01 07:20:00 January 2020 122.52000  17.56640 114.42255
#> 88  2020-01-01 07:30:00 January 2020 122.52000  10.59150  68.99015
#> 89  2020-01-01 07:40:00 January 2020  82.74610  41.00585  35.97635
#> 90  2020-01-01 07:50:00 January 2020  82.74610  41.00585  35.97635
#> 91  2020-01-01 08:00:00 January 2020  82.74610  41.00585  35.97635
#> 92  2020-01-01 08:10:00 January 2020  42.97220  41.00585  35.97635
#> 93  2020-01-01 08:20:00 January 2020  42.97220  74.77850  24.83750
#> 94  2020-01-01 08:30:00 January 2020        NA        NA        NA
#> 95  2020-01-01 08:40:00 January 2020        NA        NA        NA
#> 96  2020-01-01 08:50:00 January 2020        NA        NA        NA
#> 97  2020-01-01 09:00:00 January 2020        NA        NA        NA
#> 98  2020-01-01 09:10:00 January 2020        NA        NA        NA
#> 99  2020-01-01 09:20:00 January 2020        NA        NA        NA
#> 100 2020-01-01 09:30:00 January 2020        NA        NA        NA