【发布时间】:2018-07-21 19:51:36
【问题描述】:
我有一个数据框,其中包含样本大小、均值和标准差的列,以及 target 值:
ssize <- c(200, 300, 150)
mean <- c(10, 40, 50)
sd <- c(5, 15, 65)
target <- c(7, 23, 30)
df <- data.frame(ssize, mean, sd, target)
我希望添加另一个变量below,它返回小于target 值的元素数量,该变量来自具有参数mean 和sd 以及样本大小ssize 的正态分布。但是,我无法让rnorm 将每行的值用作参数。例如,运行
df$below <- sum(rnorm(df$ssize, df$mean, df$sd) < df$target)
生成样本大小等于length(df$ssize) 而不是df$ssize 本身的值的分布。
更新:大型数据集的数据表解决方案?
@alistaire 和 @G5W 的解决方案效果很好,但我想从每行的 100 个 rnorm 复制中提取 below 的平均值。我尝试了两种解决方案:
df <- df %>% mutate(below = mean(replicate(100, pmap_int(., ~sum(rnorm(..1, ..2, ..3) < ..4)))))
df$below <- with(df, sapply(1:nrow, function(i) mean(replicate(100, sum(rnorm(n[i], mean[i], sd[i]) < target[i])))))
但是他们需要很长时间才能运行我的数据集,该数据集有 >430 万行。是否有可能更快的数据表(或其他)解决方案?
【问题讨论】:
标签: r data.table distribution normal-distribution