r - 创建一个矩阵,其中包含每个组周期的随机观测值

标签 r matrix random-seed panel-data

我想为 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 次
  • 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/

相关文章:

java - 如何在 OSX 上配置 rJava 以选择正确的 JVM——.jinit() 失败

python - Python 中的逐元素乘法相当于 Matlab

matlab - 根据矩阵指定区域中的逻辑索引更改某些值

r - 如何将随机种子分配给 dplyr sample_n 函数?

string - 如何使用字符串作为 Golang 中 rand.Seed() 函数的输入?

R->TeX 表包 : after inputting data manually, SE 和星号在输出中丢失

r - 将关系数据转换为 R 中的层次结构列表

r - R中ggplot的错误代码

c++ - 复制数据的奇怪错误

java - 数组运行,但编译时没有给出正确的值?