题 重复重复序列


我们想得到一个如下所示的数组:

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

最简单的方法是什么?


12
2018-06-24 18:32


起源


它考虑了for循环,但不是更简单的方法吗? - Fabian Stolz


答案:


你可以用一个单独做 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

33
2018-06-24 21:20





或者,更简单(假设您的意思是矢量,而不是数组)

rep(rep(1:4,each=3),3)

17
2018-06-24 18:42





喜欢这个:

rep(sapply(1:4, function(x) {rep(x, 3)}), 3)

rep(x,N)返回重复x次的向量。 sapply分别将给定函数应用于向量1:4的每个元素,连续3次重复每个元素。


2
2018-06-24 18:39



你应该看看Dieter的回答 - 'every'参数会比你使用sapply调用做得更好。 - Dason


如果你的数字序列逐渐增加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  

您只需要更改您希望重复的次数。


2
2018-06-20 15:56





这是一个使用数组操作的方法 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

0
2017-11-01 20:20