我们希望得到一个如下所示的数组:
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
最简单的方法是什么?
答案 0 :(得分:41)
您可以通过一次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
答案 1 :(得分:18)
或者,更简单(假设你的意思是一个向量,而不是一个数组)
rep(rep(1:4,each=3),3)
答案 2 :(得分:6)
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
您只需更改要重复的次数。
答案 3 :(得分:2)
像这样:
rep(sapply(1:4, function(x) {rep(x, 3)}), 3)
rep(x,N)返回重复x次的向量。 sapply分别将给定函数应用于向量1:4的每个元素,连续3次重复每个元素。
答案 4 :(得分:0)
这是一个使用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