使用每行的均值和 sd 在 R 中模拟 rnorm 以进行许多观察

Simulate rnorm in R for many observations using mean and sd from each row

我正在尝试将 rnorm 函数应用于 R 中数据框的多行 (214)。 我想使用数据框每一行的预定义行均值和 sd 值来完成模拟,并且 n=10,000 用于所有观察。

我想使用 apply 函数来执行此操作,但是,我不清楚如何在 apply 函数中编写 rnorm 调用来一次对所有行完成此操作。

可重现的例子:

set.seed(1)
Data <- data.frame(
  Hazard = LETTERS[1:10],
  mean = sample(1:10),
  sd = c(0.14,0.23,0.21,0.27,0.12,0.19,0.21,0.18,
         0.29,0.22)
)

我试过的代码:

dist <- rnorm(10000, mean=Data$mean, sd=Data$sd)

apply(X= Data,
      FUN = dist,
      MARGIN = 1)

在此先感谢您的协助。

最好在此处使用 Map,我们循环遍历 'mean'、'sd' 列的相应元素,应用 rnorm 和 returns一个list

n <- 10000
lst1 <- Map(function(x, y) rnorm(n, mean = x, sd = y), Data$mean, Data$sd)

或者如果我们更喜欢 apply,则对感兴趣的数字列进行子集化并对其进行循环

apply(Data[-1], 1, FUN = function(x) rnorm(n, mean = x[1], sd = x[2]))

我的解决方案是使用 expand.grid 为每个可能的 mean/std 组合的模拟生成一个新的数据帧。

library(dplyr)
sim_data <-
  expand.grid(Hazard=Data$Hazard, iteration=1:10000) %>%
  left_join(Data) %>%
  mutate(x = rnorm(mean, sd))