使用每行的均值和 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))
我正在尝试将 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))