在R中将三维数据扁平化为拉长的二维数据



我有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

相关内容

  • 没有找到相关文章

最新更新