数组 – r中的2d矩阵到3d堆叠数组

我有一个数据帧数据R在昏暗的120000行乘5列.

每300行是以不同时间间隔(即400帧)测量的帧

行动

我尝试使用数组(数据,c(300,5,400))

预期

通过每300行分割数据并将这400个矩阵堆叠在一起,使这个数据帧成为一个3d数组.

实际

沿第一列数据向下读取值,并将它们放入数组的第一部分.

最佳答案
另一种选择是:

 m1 <- matrix(1:(300*400*5), nrow=300*400, ncol=5)
 lst <- lapply(split(seq_len(nrow(m1)),(seq_len(nrow(m1))-1) %/%300 +1),
                         function(i) m1[i,])

 arr1 <- array(0, dim=c(300,5,400))
 for(i in 1:400){
 arr1[,,i] <- lst[[i]]
 }

m1[297:300,]
#     [,1]   [,2]   [,3]   [,4]   [,5]
#[1,]  297 120297 240297 360297 480297
#[2,]  298 120298 240298 360298 480298
#[3,]  299 120299 240299 360299 480299
#[4,]  300 120300 240300 360300 480300

 tail(arr1[,,1],4)
 #      [,1]   [,2]   [,3]   [,4]   [,5]
 #[297,]  297 120297 240297 360297 480297
 #[298,]  298 120298 240298 360298 480298
 #[299,]  299 120299 240299 360299 480299
 #[300,]  300 120300 240300 360300 480300

或者按照@Ananda Mahto的建议

library(abind)
arr2 <-  abind(lapply(split(seq_len(nrow(m1)), 
           (seq_len(nrow(m1))-1) %/% 300 + 1), function(x) m1[x, ]), along = 3)

转载注明原文:数组 – r中的2d矩阵到3d堆叠数组 - 代码日志