生成一个向量,其中包含 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
我正在尝试创建一个向量,其中数字 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