r - 如何在数据框中的一列值下生成随机均匀分布,而不必为所述列中的每个值重复?
问题描述
我需要使用命令创建基于均匀分布的随机变量runif
。我有一列值,最大值和最小值将基于。我想知道是否有一种方法可以将runif
列向下应用,而不必为值列中的每个值重复该过程?没有其他人可以使用。我们正在使用rnorm
andrunif
等,因此不允许使用其他统计信息。
例如:
set.seed(1234)
values <- (30, 45, 80, 90, 80)
var_1 <- runif(5, 30*(.5), 30*(1.25))
var_2 <- runif(5, 45*(.5), 45*(1.25))
var_3 <- runif(5, 80*(.5), 80*(1.25))
var_4 <- runif(5, 90*(.5), 90*(1.25))
var_5 <- runif(5, 80*(.5), 80*(1.25))
这基本上是我必须做的,但它只是一个比五个观察更大的数据框。我还必须生成比 5 更多的随机数。我希望有一种方法可以加快该过程,因此我不需要为var_3 <- runif
数据报中的每一行重复该部分。如果有帮助,我可以将数据框的列转换为具有单列和多行的矩阵。最终,我将从这些随机生成的数字中进行抽样,以执行蒙特卡罗模拟。
我假设某些 apply 功能会起作用,但我仍然不确定 apply 系列的任何东西是如何工作的。我查看了一些已经发布的答案,但答案有点超出我的想象,我无法改变它们来帮助我,因为我最初认为我可以。
解决方案
像这样:
set.seed(1234)
values <- c(30, 45, 80, 90, 80)
mat <- sapply(values, function(x) runif(5, x*(.5), x*(1.25)))
colnames(mat) <- values
mat
> mat
30 45 80 90 80
[1,] 15.79778 33.49176 82.79809 106.63342 84.65663
[2,] 27.71421 27.73334 46.04614 108.84509 94.95845
[3,] 21.30580 26.88622 97.01830 63.84305 99.67589
[4,] 19.59442 37.19917 47.30907 53.33430 96.54164
[5,] 18.00913 23.80419 53.17940 98.80833 69.16812
推荐阅读
- tensorflow - Tensorflow lite 模型给出错误的输出
- python - Python 从列表及其变体创建正则表达式
- database - 当所有嵌入文档的属性等于特定值时,Mongoose 获取所有文档,但当它具有另一个值时忽略该属性
- c# - 以特定格式返回 json Web API, Linq
- windows - 日志文件重达数百 GB,无法删除
- python - 在excel文件中获取标题
- java - Java格式化,我如何让一个符号坚持一个int?
- google-bigquery - 未找到 Datastudio 列名
- javascript - 如何使用 JS 从元素中获取多个值?
- dart - BottomNavigationBarItem 中添加的四个图标不起作用