You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用R按行处理二项分布:模拟ID患病状态遇问题求助

问题分析与解决方案

嘿,这个坑我之前也踩过!咱们来一步步把问题理清楚:

你出错的核心原因

你写的rbinom(1,1,df$probability)里,第一个参数n是要生成的随机数总数。当你把n设为1时,R只会生成1个0或1的结果,然后靠着R的「向量回收」规则,把这1个值重复填充到整个df$sick列里——这就是为什么你得到的结果全是0或者全是1啦!

正确的代码写法

你需要把n设置为数据框的行数,这样R才会为每一行的概率单独生成对应的患病状态:

# 先构造你的测试数据框
df <- data.frame(ID = c(1,2,3), probability = c(0.5,0.8,0.3))

# 为每个ID生成对应概率的患病状态
df$sick <- rbinom(nrow(df), 1, df$probability)

为什么这样可行?

  • nrow(df)会返回数据框的行数(这里是3),告诉R要生成3个独立的随机数
  • 第二个参数size=1表示每个随机数是一次伯努利试验(只有0/1两种结果)
  • 第三个参数prob=df$probability是长度为3的向量,R会把它和n=3一一对应,为每个ID用专属概率生成患病状态

运行后你会得到类似这样的随机结果(每次运行可能有差异):

ID probability sick
1  1         0.5    1
2  2         0.8    1
3  3         0.3    0

内容的提问来源于stack exchange,提问作者Panda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:36:25