r - 如何有效地将 rbinom 函数应用于数据框中的每一行?
问题描述
给定一个包含不同变量的计数和变化率的数据表,我如何从给定比率的每个变量的计数中采样?例如,给定以下数据表,我可以循环并使用 sample 或 rbinorm 函数来获得所需的输出。但是,我尝试在其上实现此功能的数据集非常大。有没有提高性能的方法?
library(data.table)
set.seed(1)
dt <- data.table(
count = sample(10000:20000, 100),
rate = sample(1:20, 100, replace = T) / 1000
)
system.time(
for (i in 1:nrow(dt)){
dt$sample_n[i] <- sum(sample(1:0,
dt$count[i],
prob = c(dt$rate[i], 1-dt$rate[i]),
replace = T))
}
)
system.time(
for (i in 1:nrow(dt)){
dt$sample_n2[i] <- rbinom(size = dt$count[i], n = 1, prob = dt$rate[i])
}
)
解决方案
所有采样函数通常都是矢量化的,这意味着您可以直接执行以下操作:
dt$sample_n2 <- rbinom(size = dt$count, n = nrow(dt), prob = dt$rate)
推荐阅读
- javascript - 我收到一个错误,因为 Uncought 语法错误:标识符“i”已在我的 js 代码中声明
- angular - Ngx Bootstrap 下拉菜单无法在 ag 网格中显示完整列表
- linux - 在 vim 缩写中定义 linux 命令
- javascript - 无法更改源自 Android 原生基础的选取器元素的字体大小和字体粗细
- amazon-cloudformation - 如何在从控制台构建的现有服务上执行基础架构代码?
- python - 从 n m 列数据帧创建 m n 列数据帧
- r - 如何重新排列R中的列元素?
- java - 升级到 react-native 版本 0.60.4 后 react-native run-android 出错
- python - 在按钮单击时将线添加到 Plotly Scattermapbox
- kotlin - 如何在 okhttp 4 中使用新的扩展功能