我想为 N 个组和 T 个时间段创建一个矩阵。对于 T-N 的每种组合,我希望有随机数量的行。
每个 N-T 的随机行数由 round(runif(1,2,4)) 给出。
目标是作为输入:
set.seed(123)
ngroup = 2
tperiod = 2
使用 round(runif(1,2,4)) 4 次给出 3,4,3,4,所以输出应该有:
- 3行1组1次1
- 4 行,第 1 组第 2 次li>
- 3 行,第 2 组,第 1 次
- 4 行,第 2 组时间 2
输出应该是:
mat = cbind(c(1,1,1,1,1,1,1,2,2,2,2,2,2,2), c(1,1,1,2,2,2,2,1,1,1,2,2,2,2))
mat
[,1] [,2]
[1,] 1 1
[2,] 1 1
[3,] 1 1
[4,] 1 2
[5,] 1 2
[6,] 1 2
[7,] 1 2
[8,] 2 1
[9,] 2 1
[10,] 2 1
[11,] 2 2
[12,] 2 2
[13,] 2 2
[14,] 2 2
其中第一列是组 ID,第二列是时间 ID。
最佳答案
选项 1:对 expand.grid
的结果建立索引。
set.seed(123)
N <- 1:2
T <- 1:2
combos <- length(N)*length(T)
expand.grid(list(T = T, N = N))[rep.int(1:combos, round(runif(combos, 2, 4))),2:1]
#> N T
#> 1 1 1
#> 1.1 1 1
#> 1.2 1 1
#> 2 1 2
#> 2.1 1 2
#> 2.2 1 2
#> 2.3 1 2
#> 3 2 1
#> 3.1 2 1
#> 3.2 2 1
#> 4 2 2
#> 4.1 2 2
#> 4.2 2 2
#> 4.3 2 2
选项 2:rep.int(rep(
.
set.seed(123)
r <- round(runif(length(N)*length(T), 2, 4))
data.frame(
N = rep.int(rep(N, each = length(T)), r),
T = rep.int(rep(T, length(N)), r)
)
#> N T
#> 1 1 1
#> 2 1 1
#> 3 1 1
#> 4 1 2
#> 5 1 2
#> 6 1 2
#> 7 1 2
#> 8 2 1
#> 9 2 1
#> 10 2 1
#> 11 2 2
#> 12 2 2
#> 13 2 2
#> 14 2 2
关于r - 创建一个矩阵,其中包含每个组周期的随机观测值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76517932/