Home > OS >  Generating a vector with n repetitions of x, then y, then z, with a fixed upper bound
Generating a vector with n repetitions of x, then y, then z, with a fixed upper bound

Time:04-09

I am trying to create a vector where I have 3 repetitions of the number 1, then 3 repetitions of the number 2, and so on up to, for instance, 3 repetitions of the number 36.

c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5...)

I have tried the following use of rep() but got the following error:

Error in rep(3, seq(1:36)) : argument 'times' incorrect

What formulation do I need to use to properly generate the vector I want?

CodePudding user response:

sort(rep(1:36, 3))

Or even better as @Wimpel mentioned in the comments, use the each argument of the rep function.

rep(1:36, each = 3)

output

# [1]  1  1  1  2  2  2  3  3  3  4  4  4  5  5  5  6  6  6  7  7  7  8  8  8  9  9  9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22
#  [65] 22 22 23 23 23 24 24 24 25 25 25 26 26 26 27 27 27 28 28 28 29 29 29 30 30 30 31 31 31 32 32 32 33 33 33 34 34 34 35 35 35 36 36 36

CodePudding user response:

This one should work. However probably not the most elegant.

reps = c()
n = 36
for(i in 1:n){
  reps = append(reps, rep(i, 3))
}
reps

alternatively using the rep function properly (see documentation (?rep for argument each):

rep(1:36,each = 3)

CodePudding user response:

rep approach is preferable (see existing answers)

Here are some other options:

> kronecker(1:36, rep(1, 3))
  [1]  1  1  1  2  2  2  3  3  3  4  4  4  5  5  5  6  6  6  7  7  7  8  8  8  9
 [26]  9  9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17
 [51] 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25
 [76] 26 26 26 27 27 27 28 28 28 29 29 29 30 30 30 31 31 31 32 32 32 33 33 33 34
[101] 34 34 35 35 35 36 36 36

> c(outer(rep(1, 3), 1:36))
  [1]  1  1  1  2  2  2  3  3  3  4  4  4  5  5  5  6  6  6  7  7  7  8  8  8  9
 [26]  9  9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17
 [51] 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25
 [76] 26 26 26 27 27 27 28 28 28 29 29 29 30 30 30 31 31 31 32 32 32 33 33 33 34
[101] 34 34 35 35 35 36 36 36
  • Related