生成一个向量,其中包含 x、y、z 的 n 次重复,具有固定的上限

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

我正在尝试创建一个向量,其中数字 1 重复 3 次,然后数字 2 重复 3 次,依此类推,直到数字 36 重复 3 次。

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

我尝试了 rep() 的以下用法,但出现以下错误:

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

我需要使用什么公式来正确生成我想要的向量?

这个应该可以。然而可能不是最优雅的。

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

或者正确使用 rep 函数(参见文档(?rep 参数 each):

rep(1:36,each = 3)
sort(rep(1:36, 3))

或者像@Wimpel 在评论中提到的那样更好,使用 rep 函数的每个参数。

rep(1:36, each = 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  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

rep 方法更可取(参见现有答案)

这里有一些其他选项:

> 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