有没有办法以窗口滑动的形式选择数据?

问题描述 投票:0回答:1

我想使用主数据集中的滑动窗口 5 生成包含五列的新数据。

我想要的输出结果:

dataset     
disp1   disp2   disp3
-2.5    -4.8    -1.4
1.3 0.6 3.1
-1.7    -6.4    -1.7
-8.9    9.7 -5.3
-5  -3.1    -1.1
-4.8    -5.7    -0.1
-7.7    -4.4    -3.7
3.4 1.8 15.5
14.2    3.5 7.2
-10.2   5.4 -8.6

期望的结果:

newdata             
I   II  III IV  Output
-2.5    1.3 -1.7    -8.9    -5
1.3 -1.7    -8.9    -5  -4.8
-1.7    -8.9    -5  -4.8    -7.7
-8.9    -5  -4.8    -7.7    3.4
-5  -4.8    -7.7    3.4 14.2
-4.8    -7.7    3.4 14.2    -10.2
-7.7    3.4 14.2    -10.2   -4.8
3.4 14.2    -10.2   -4.8    0.6
14.2    -10.2   -4.8    0.6 -6.4
-10.2   -4.8    0.6 -6.4    9.7
-4.8    0.6 -6.4    9.7 -3.1
0.6 -6.4    9.7 -3.1    -5.7
-6.4    9.7 -3.1    -5.7    -4.4
9.7 -3.1    -5.7    -4.4    1.8
-3.1    -5.7    -4.4    1.8 3.5
-5.7    -4.4    1.8 3.5 5.4
-4.4    1.8 3.5 5.4 -1.4
1.8 3.5 5.4 -1.4    3.1
3.5 5.4 -1.4    3.1 -1.7
5.4 -1.4    3.1 -1.7    -5.3
-1.4    3.1 -1.7    -5.3    -1.1
3.1 -1.7    -5.3    -1.1    -0.1
-1.7    -5.3    -1.1    -0.1    -3.7
-5.3    -1.1    -0.1    -3.7    15.5
-1.1    -0.1    -3.7    15.5    7.2
-0.1    -3.7    15.5    7.2 -8.6

我尝试使用 mutate 和 for 循环,但无法获得所需的结果

r dataframe mutate
1个回答
0
投票
v <- unlist(df)
size <- 5
vapply(seq_along(v)[1:(length(v)- size + 1)], function(x) vals[x:(x + size - 1)], FUN.VALUE = numeric(size)) |> t()

输出:

      disp11 disp12 disp13 disp14 disp15
 [1,]   -2.5    1.3   -1.7   -8.9   -5.0
 [2,]    1.3   -1.7   -8.9   -5.0   -4.8
 [3,]   -1.7   -8.9   -5.0   -4.8   -7.7
 [4,]   -8.9   -5.0   -4.8   -7.7    3.4
 [5,]   -5.0   -4.8   -7.7    3.4   14.2
 [6,]   -4.8   -7.7    3.4   14.2  -10.2
 [7,]   -7.7    3.4   14.2  -10.2   -4.8
 [8,]    3.4   14.2  -10.2   -4.8    0.6
 [9,]   14.2  -10.2   -4.8    0.6   -6.4
[10,]  -10.2   -4.8    0.6   -6.4    9.7
[11,]   -4.8    0.6   -6.4    9.7   -3.1
[12,]    0.6   -6.4    9.7   -3.1   -5.7
[13,]   -6.4    9.7   -3.1   -5.7   -4.4
[14,]    9.7   -3.1   -5.7   -4.4    1.8
[15,]   -3.1   -5.7   -4.4    1.8    3.5
[16,]   -5.7   -4.4    1.8    3.5    5.4
[17,]   -4.4    1.8    3.5    5.4   -1.4
[18,]    1.8    3.5    5.4   -1.4    3.1
[19,]    3.5    5.4   -1.4    3.1   -1.7
[20,]    5.4   -1.4    3.1   -1.7   -5.3
[21,]   -1.4    3.1   -1.7   -5.3   -1.1
[22,]    3.1   -1.7   -5.3   -1.1   -0.1
[23,]   -1.7   -5.3   -1.1   -0.1   -3.7
[24,]   -5.3   -1.1   -0.1   -3.7   15.5
[25,]   -1.1   -0.1   -3.7   15.5    7.2
[26,]   -0.1   -3.7   15.5    7.2   -8.6

数据:

df <- read.table(text = "
disp1   disp2   disp3
-2.5    -4.8    -1.4
1.3 0.6 3.1
-1.7    -6.4    -1.7
-8.9    9.7 -5.3
-5  -3.1    -1.1
-4.8    -5.7    -0.1
-7.7    -4.4    -3.7
3.4 1.8 15.5
14.2    3.5 7.2
-10.2   5.4 -8.6", h = T)
© www.soinside.com 2019 - 2024. All rights reserved.