r - 为R中的每一行生成具有不同概率的随机数
问题描述
我想为我的 data.frame 中的每一行生成一个从 1 到 4 的随机数 u。但是,每条线的概率不同,这些概率存储在变量 p00、p10、p01、p11 中。这意味着 1 的概率是 p00,2 p01 等。我的 data.frame 中有 406611 行。data01 包含变量 p00、p10、p01、p11。
我正在做以下事情
data02 <- data01 %>%
mutate (u = sample(x=c(1:4), size=406611, replace = T, prob=c(p00, p10, p01, p11))
但是我收到以下错误:
Error in sample.int(length(x), size, replace, prob) :
incorrect number of probabilities.
如果我这样做(只是为了尝试),我不会收到任何错误:
data02 <- data01 %>%
mutate (u = sample(x=c(1:4), size=406611, replace = T, prob=c(0.25, 0.25, 0.25, 0.25))
为什么这不起作用?如何生成数字?
解决方案
问题是您将 4 个向量传递给(整个列 p00、p10、p01 和 p11)的probs
参数,但没有以这种方式向量化,并且只采用一个概率向量。sample
sample
您需要编写一个sample
矢量化的版本probs
。像这样的东西:
vec_sample <- function(A, B, C, D)
{
do.call("c", lapply(seq_along(A), function(i)
{
sample(1:4, 1, replace = TRUE, prob=c(A[i], B[i], C[i], D[i]))
}))
}
所以你的代码会像这样工作:
data02 <- data01 %>% mutate(u = vec_sample(p00, p10, p01, p11))
推荐阅读
- terraform - 根据使用计数创建的值获取资源
- rest - Rest api - 定义层级数据的 URL
- rest - JavaMelody 多老化服务器聚合监控报告
- sql - 数据迁移 2 具有一些相似行的表
- javascript - 飞碟 - 第一页与其他页面不同
- php - 如何在 HTML 或 PHP 的下拉菜单中添加图像?
- python - 使用 Python Pandas df.loc 定位部分变量值
- javascript - 为什么'useState'钩子在函数引用时会调用初始状态?
- flex-lexer - 运行flex生成词法分析器时无法匹配规则
- android - 如何将我的获取数据转换为产品列表?