我有一个数据帧,看起来像这样:
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 = 11
、slice
是'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