我们希望得到一个数组,看起来像这样:
1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4
什么是做到这一点的最简单的方法?
我们希望得到一个数组,看起来像这样:
1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4
什么是做到这一点的最简单的方法?
你可以用一个单一的做rep
通话。 的each
和times
参数依次与所评估的each
首先被完成。
rep(1:4, times=3, each=3)
#[1] 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4
或者,更简单的(假设你的意思是一个矢量,而不是一个数组)
rep(rep(1:4,each=3),3)
,42的回答会工作,如果你的号码的顺序逐步增加1不过,如果你想包括通过一组间隔增加的数字序列(例如,从0到60的15),你可以这样做:
rep(seq(0,60,15), times = 3)
[1] 0 15 30 45 60 0 15 30 45 60 0 15 30 45 60
你只需要改变你想这个重复的次数。
像这样:
rep(sapply(1:4, function(x) {rep(x, 3)}), 3)
代表(X,N)返回重复X N次的矢量。 分别如图4所示,重复每个元素连续3次:sapply应用于给定函数的矢量1的每个元素。
下面是一个使用数组操作用的方法aperm
。 我们的想法是构建包含值的数组。 重新排列它们,所以它们符合使用该期望的输出aperm
,然后“展开”与阵列c
。
c(aperm(array(1:4, dim=c(4,3,3)), c(2, 1, 3)))
[1] 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4