首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将板材的行绑定到3d数组中以形成2d数组

将板材的行绑定到3d数组中以形成2d数组
EN

Stack Overflow用户
提问于 2014-06-18 08:35:30
回答 2查看 963关注 0票数 4

我有一个三维数组,我想通过逐行堆叠一维(组合一维的行)来折叠到二维。在我的代码中,我在一个“工作表”(3维)的每个索引处都填充了一个二维数组,现在我想要获取这个三维数组并将这些工作表的行堆叠在另一个顶部。

下面是一个示例数组,这样我就可以解释我希望最终结果是什么样子:

代码语言:javascript
运行
复制
x <- array(1:24, dim=c(2, 3, 4),
           dimnames=list(letters[1:2], LETTERS[1:3], letters[23:26]))
dim(x)

我希望wxyz在一个2维数组中堆叠在一起,这个数组有8行3列。下面是一种很麻烦的方法(在我的循环中是不可能的):

代码语言:javascript
运行
复制
x1<-x[,,1]
x2<-x[,,2]
x3<-x[,,3]
x4<-x[,,4]

All<-rbind(x1,x2,x3,x4)

我看过abindadrop,但它们并不完全正确。

我也尝试过aperm,但我不认为你可以用它来降维,只是转置(?)

或者,我可以创建一个list (实际上,这将是理想的,因为数组可能具有不同的行号)。在这种情况下,我如何以相同的方式组合列表中多个元素的行?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2014-06-18 09:41:43

我会将我的评论提升为答案,尽管我仍然认为应该有一种方法来实现这一点,只需改变维度。

代码语言:javascript
运行
复制
apply(x, 2, c)
#or if you're really pushing for speed, the simpler function:
apply(x, 2, identity)

# Giving:
#      A  B  C
#[1,]  1  3  5
#[2,]  2  4  6
#[3,]  7  9 11
#[4,]  8 10 12
#[5,] 13 15 17
#[6,] 14 16 18
#[7,] 19 21 23
#[8,] 20 22 24

匹配请求的输出和行名:

代码语言:javascript
运行
复制
all.equal(apply(x,2,c), All, check.attributes=FALSE)
#[1] TRUE
票数 5
EN

Stack Overflow用户

发布于 2014-06-18 09:51:10

下面是如何通过操作维度来完成此操作:

代码语言:javascript
运行
复制
y <- aperm(x, c(1, 3, 2))
dim(y) <- c(prod(dim(x)[-2]), dim(x)[2])
# the above evaluates to c(8, 3)

y

#      [,1] [,2] [,3]
# [1,]    1    3    5
# [2,]    2    4    6
# [3,]    7    9   11
# [4,]    8   10   12
# [5,]   13   15   17
# [6,]   14   16   18
# [7,]   19   21   23
# [8,]   20   22   24    

如果需要,请与colnames(y) <- colnames(x)进行跟进。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24275366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档