You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中为N组T时段生成每组-时段随机行数的矩阵

生成含随机行数的组-时间周期矩阵

需求说明

需要创建一个包含N个组、T个时间周期的矩阵,每个组-时间周期组合对应随机行数,行数由round(runif(1,2,4))生成(即随机取2、3、4中的一个整数)。

输入示例

set.seed(123)
ngroup = 2
tperiod = 2

执行后,4次调用round(runif(1,2,4))得到的结果为3、4、3、4,对应以下要求:

  • 组1时间1有3行
  • 组1时间2有4行
  • 组2时间1有3行
  • 组2时间2有4行

输出示例

最终矩阵第一列为组ID,第二列为时间ID,示例如下:

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

实现代码

以下是通用的R代码实现,可适配任意N和T的值:

set.seed(123)
ngroup <- 2
tperiod <- 2

# 生成所有组-时间的组合
group_time_pairs <- expand.grid(group = 1:ngroup, time = 1:tperiod)
# 为每个组合生成随机行数(2-4之间的整数)
row_numbers <- sapply(1:nrow(group_time_pairs), function(x) round(runif(1, 2, 4)))
# 根据行数重复每个组-时间组合
data_list <- mapply(function(g, t, n) data.frame(group = rep(g, n), time = rep(t, n)),
                    group_time_pairs$group, group_time_pairs$time, row_numbers, SIMPLIFY = FALSE)
# 合并数据并转为矩阵
result_mat <- do.call(rbind, data_list) |> as.matrix()

# 打印结果
result_mat

代码说明

  1. 生成组合:用expand.grid生成所有组与时间的笛卡尔积,确保每个组-时间组合都被覆盖。
  2. 生成随机行数:通过sapply循环为每个组合生成指定范围的随机行数。
  3. 重复组合:用mapply对每个组-时间组合,按生成的行数重复对应的ID,生成子数据框。
  4. 合并转矩阵:将所有子数据框合并后转为矩阵,得到符合要求的结果。

内容的提问来源于stack exchange,提问作者yacx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 02:52:35