我有dim为10,5,2 (t,x,y)的数据,我想将其转换为维度10*5,3。即将每个t帧附加到具有t值的(x,y)帧。
,
data[1,,]=
x y
1 2
1 3
data[2,,]=
x y
5 2
1 6
我想把这个数据转换成像这样的flatten数组
x y t
1 2 1
1 3 1
5 2 2
1 6 2
我正在寻找是否已经有R函数来做到这一点,或者我会通过循环每个t数组并在主数组的底部添加重新创建的数组来做到这一点。
a <- array(1:8, c(2,2,2))
a[1,,]
# [,1] [,2]
#[1,] 1 5
#[2,] 3 7
a[2,,]
# [,1] [,2]
#[1,] 2 6
#[2,] 4 8
m <- matrix(aperm(a, c( 2, 1, 3)), nrow=prod(dim(a)[2:3]))
cbind(m, rep(seq_len(dim(a)[2]), each=dim(a)[1]))
# [,1] [,2] [,3]
#[1,] 1 5 1
#[2,] 3 7 1
#[3,] 2 6 2
#[4,] 4 8 2
这里有一个不同的方法:
a <- array(c(1,5,1,1,2,2,3,6), dim = c(2,2,2) )
do.call('rbind',lapply(1:dim(a)[3], function(x) cbind(a[x,,], t = x)))
t
[1,] 1 2 1
[2,] 1 3 1
[3,] 5 2 2
[4,] 1 6 2
Also:
如果a
是数组。
ft <- ftable(a)
cbind(ft[,1:2], as.numeric(factor(gsub("\_.*","",row.names(as.matrix(ft))))))
[,1] [,2] [,3]
[1,] 1 2 1
[2,] 1 3 1
[3,] 5 2 2
[4,] 1 6 2