如何在R中对数据帧的两列进行滚动应用



我有一个数据帧,看起来像这样:

library(tidyverse)
a = seq(-5000,1500,length.out=31);a
b = seq(2000,-5000,length.out=31);b
w = tibble(a,b)%>%base::print(n=31)

# A tibble: 31 × 2
a      b
<dbl>  <dbl>
1 -5000    2000 
2 -4783.   1767.
3 -4567.   1533.
4 -4350    1300 
5 -4133.   1067.
6 -3917.    833.
7 -3700     600 
8 -3483.    367.
9 -3267.    133.
10 -3050    -100 
11 -2833.   -333.
12 -2617.   -567.
13 -2400    -800 
14 -2183.  -1033.
15 -1967.  -1267.
16 -1750   -1500 
17 -1533.  -1733.
18 -1317.  -1967.
19 -1100   -2200 
20  -883.  -2433.
21  -667.  -2667.
22  -450   -2900 
23  -233.  -3133.
24   -16.7 -3367.
25   200   -3600 
26   417.  -3833.
27   633.  -4067.
28   850   -4300 
29  1067.  -4533.
30  1283.  -4767.
31  1500   -5000 

我想检查滑动窗口为11的数据帧(从上到下从第一个11开始(;a";列中的最大值。根据我的例子,这将是值-667。然后停止并保留新的数据帧:

21  -667.  -2667.
22  -450   -2900 
23  -233.  -3133.
24   -16.7 -3367.
25   200   -3600 
26   417.  -3833.
27   633.  -4067.
28   850   -4300 
29  1067.  -4533.
30  1283.  -4767.
31  1500   -5000 

从这个数据帧中,我想取我之前停止的667和列b的底部-5000,并将它们相加-5000-667=-5667。

如何在R中做到这一点?

我们循环遍历slide中的行序列,.after = 11slice是'w'的行,其中'a'的值为max,获取相应的索引进行切片,使用.complete = TRUE只返回那些具有完整的11个索引集的行,否则它将为NULL,_dfr将从切片的数据中返回一个tibble,然后使用slice_tail返回最后11行

library(slider)
library(dplyr)
library(purrr)
n1 <- 11
seq_len(nrow(w)) %>%
slide_dfr(~ {
ind <- .x
w %>% 
slice(ind[which.max(a[.x])])
}, .after = n1, .complete = TRUE) %>%
slice_tail(n = n1)

-输出

# A tibble: 11 × 2
a      b
<dbl>  <dbl>
1 -667.  -2667.
2 -450   -2900 
3 -233.  -3133.
4  -16.7 -3367.
5  200   -3600 
6  417.  -3833.
7  633.  -4067.
8  850   -4300 
9 1067.  -4533.
10 1283.  -4767.
11 1500   -5000 

最新更新