提问人:cidc12 提问时间:11/17/2023 最后编辑:Markcidc12 更新时间:11/19/2023 访问量:27
有没有办法以窗口滑动的形式选择数据?
Is there a way to select data in a form of windows sliding?
问:
我想使用主数据集中 5 的滑动窗口生成一个包含五列的新数据。
我想要的输出 resluts:
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 循环,但我无法获得所需的结果
答:
0赞
Mark
11/19/2023
#1
步骤:
- 将数据帧转换为向量。
- 选择我们希望结果矩阵的大小(在本例中为 5)。
- 使用 : 从第一个索引到第 -th 个索引,从向量中获取下一个值。
vapply()
size minus 1
size
- 转置矩阵,因为当我们想要一个长矩阵时,会给我们一个宽矩阵。
vapply()
v <- unlist(df)
size <- 5
vapply(seq_along(v)[1:(length(v)- size + 1)], \(x) vals[x:(x + size - 1)], 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)
评论