如何使用 rnorm 为每个 ID(总共 1000 个 ID)生成相同的值?

How to generate the same value per ID (for 1000 IDs in total) with rnorm?

我想创建一个data.frame,其中应该包含一个参数值(体表面积,BSA)。它应该在这个 data.frame 中使用 rnorm() 为 1000 个 ID 生成。有

BSA<-data.frame(rep(rnorm(n = 1000, mean = 1.81, sd = 0.2)))

我可以轻松获得 1000 个 ID 的那些值。但是,我希望每个 ID 不仅有 1 个观测值,而且有 36 个观测值。如何根据上述平均值和 SD 为一个 ID 生成相同的 BSA 值 36 次,并对总共 1000 个 ID 执行此过程?

不幸的是,

data.frame(rep(rnorm(1, 1.81, 0.2), times=36),times = 1000))

当然不行。

编辑:输出应如下所示:

1.89
1.89
1.89
1.67
1.67
1.67
1.74
1.74
1.74

这将是一列中每个 ID 的三个观察值。

编辑2: 代码可能如下所示:

BSA<-data.frame(c(rep(rnorm(1, 1.81, 0.2), times=36), rep(rnorm(1, 1.81, 0.2), times=36)))

这将为两个 ID 生成所需的输出,但为 1000 个 ID 执行此操作不太可行。

原则上可以用cbind,每个"id"抽一个rnorm

n <- 36  ## 36 IDs
o <- 5  ## 5 observations (change to 1000 in your case)

set.seed(42)
res <- do.call(rbind.data.frame, lapply(1:n, function(i) 
  cbind(id=i, o=1:o, v=rnorm(1, 1.81, .2))))
res[1:15, ]
#    id o        v
# 1   1 1 2.084192
# 2   1 2 2.084192
# 3   1 3 2.084192
# 4   1 4 2.084192
# 5   1 5 2.084192
# 6   2 1 1.697060
# 7   2 2 1.697060
# 8   2 3 1.697060
# 9   2 4 1.697060
# 10  2 5 1.697060
# 11  3 1 1.882626
# 12  3 2 1.882626
# 13  3 3 1.882626
# 14  3 4 1.882626
# 15  3 5 1.882626

或者,如果你想要一个向量,混合 repreplicate,然后 c 连接结果,

set.seed(42)
res2 <- do.call(c, replicate(n, rep(rnorm(1, 1.81, .2), o), simplify=F))

使用 repeach= 参数更简单(感谢 @Onyambu)。

set.seed(42)
res2 <- rep(rnorm(o, 1.81, .2), each=n)

res2[1:15]
# [1] 2.084192 2.084192 2.084192 2.084192 2.084192 1.697060
# [7] 1.697060 1.697060 1.697060 1.697060 1.882626 1.882626
# [13] 1.882626 1.882626 1.882626

要获取数据框,当然只需执行 as.data.frame(res2) 或类似操作。