我们希望得到一个数组,看起来像这样:重复重复序列
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
这在我看来应该是被接受的答案 – Andrie
像这样:
rep(sapply(1:4, function(x) {rep(x, 3)}), 3)
代表(X,N)返回重复X N次的矢量。 sapply将给定的函数分别应用于矢量1:4的每个元素,每个元素连续重复3次。
你应该看看Dieter的答案 - 'each'参数会比你使用sapply调用做的更好。 – Dason
或者,简单(假设你的意思是一个矢量,而不是一个数组)
rep(rep(1:4,each=3),3)
这是一个使用数组操作的方法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
它想到了一个for循环,但不是有一个更简单的方法吗? –