0

データフレームがあり、ローリング サムを使用して前の n 行と次の n 行を合計したい場合、これを行う最善の方法は何ですか? roll_sum は知っていますが、自分のユース ケースに合わせて使用​​する方法が見つかりません。たとえば、ベクトル n があるとします。そして、ウィンドウを 1 にすることを指定します。つまり、レコードごとに、それと隣接する 2 つのレコードを合計します。

n   window1
1   NA
3   8
4   12
5   15
6   18
7   22
9   17
1   15
5   6

ウィンドウ サイズとして 2 を指定した場合、結果は次のようになります。

n   window1 window2
1   NA  NA
3   8   NA
4   12  19
5   15  25
6   18  31
7   22  28
9   17  28
1   15  22
5   6   15

これを行う簡単な方法はありますか?

4

2 に答える 2

0

おそらく専用の機能がありますが、これはうまくいくようです。これにより、どのように動作させたいかをある程度制御できます。たとえば、default = 0in the lead 関数を使用すると、先頭の値がなくても、最後のレコードに移動できます。私の予想では、これは比較的遅く、非効率的です。

library(dplyr)
library(purrr)

rolling_sum <- function(v, window = 1) {

  k <- 1:window

  vLag <- k %>%
    map_dfc(~lag(v, .))

  vLead <- k %>%
    map_dfc(~lead(v, ., default = 0))

  rowSums(bind_cols(vLag, V = v, vLead))

}

df <- data.frame(n = c(1,3,4,5,6,7,9,1,5))

df %>%
  mutate(window1 = rolling_sum(n, 1),
         window2 = rolling_sum(n, 2))
于 2019-01-25T13:18:24.353 に答える
0

Zooパッケージのrollapplyrがあなたの友達だと思います。align = 'center' を使用すると、前の n 行と次の n 行を合計できます。

于 2019-01-25T13:18:53.397 に答える