我们想要得到一个像这样的数组:
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) # 'each' done first regardless of order of named parameters
#[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)
如果您的数字序列每次增加1,则42-'s的答案可以奏效。但是,如果您想包括按固定间隔增加的数字序列(例如从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)
rep(x, N) 返回一个向量,其中元素x重复N次。sapply将给定函数分别应用于向量1:4的每个元素,并连续三次重复每个元素。
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