问题
We want to get an array that looks like this:
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
What is the easiest way to do it?
回答1:
You can do it with a single rep call. The each and times parameters are evaluated sequentially with the each being done first.
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
回答2:
Or, simpler (assuming you mean a vector, not an array)
rep(rep(1:4,each=3),3)
回答3:
42-'s answer will work if your sequence of numbers incrementally increases by 1. However, if you want to include a sequence of numbers that increase by a set interval (e.g. from 0 to 60 by 15) you can do this:
rep(seq(0,60,15), times = 3)
[1] 0 15 30 45 60 0 15 30 45 60 0 15 30 45 60
You just have to change the number of times you want this to repeat.
回答4:
Like this:
rep(sapply(1:4, function(x) {rep(x, 3)}), 3)
rep(x, N) returns a vector repeating x N times. sapply applies the given function to each element of the vector 1:4 separately, repeating each element 3 times consecutively.
回答5:
Here is a method using array manipulation with aperm. The idea is to construct an array containing the values. Rearrange them so they match the desired output using aperm, and then "unfold" the array with 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
来源:https://stackoverflow.com/questions/11180125/repeating-a-repeated-sequence