使用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
相关产品推荐
相关产品推荐

