【问题标题】:R - Creating Probability of Occurrence in data frameR - 在数据框中创建发生概率
【发布时间】:2014-12-23 01:20:33
【问题描述】:

如果我必须创建一个包含 19 个学生的表,每个学生都有 10 个关于他们是否按时上课的数据。我想将 100% 的准时率、90% 的准时率和 80% 的准时率随机分配给每个学生。我想不出一种方法来随机分配每个人的准时百分比。(例如,学生 #1 的准时率为 90%,而学生 #2 的准时率为 70%,等等。)这就是我想出如果所有学生的准时率都达到 90%。

ID<-data.frame(rep(1:19,each=10))
ID$DOSE<- c(replicate(19,
c(sample(rep(c("on time","late")),size=10,replace=TRUE,prob=c(0.90,0.10)))))

提前谢谢你!

【问题讨论】:

  • 您的代码中的问题似乎是您在replace=TRUE 上输入了错误的TRUE。您的代码面临哪些问题?
  • 感谢您发现错误。我想问一下是否要随机化不同学生的准时百分比。例如,学生 #1 的准时率为 90%,而学生 #2 的准时率为 70%,以此类推。
  • 是否每个学生都有独立的迟到概率,这是先验已知的?

标签: r for-loop random dataframe probability


【解决方案1】:

对于 19 名学生中的每一个,只需随机抽取一个准时率

probs<-c(.9,.8,.7)
onTimeRates<-sample(probs,19,replace=TRUE)
[1] 0.8 0.7 0.7 0.7 0.7 0.8 0.8 0.9 0.8 0.7 0.8 0.9 0.9 0.8 0.8 0.9 0.9 0.7 0.7

然后为这些学生中的每一个,画出 10 个“准时”的数据,以及相应的概率

x<-sapply(onTimeRates,function(x) sample(c('punctual','late'),10,replace=TRUE,prob=c(x,1-x) ))

然后将此变量x 折叠到您想要的列中。

ID$DOSE<-matrix(x,ncol=1)

【讨论】:

  • 无论如何要恢复反对票?这完全是偶然的。当我尝试撤消否决票时,它会显示消息“您上次对此答案投票是 1 小时前。除非编辑此答案,否则您的投票现在已锁定。”。真的很抱歉!
  • 如果你稍微修改一下,我可以改回来=]
【解决方案2】:

您可以尝试为学生分配不同的概率,然后使用随机其行为 on timelate

1 创建data.frame

DF = data.frame(ID = rep(1:19,each=10))

2 为每个学生分配一个概率:

DF$prob = rep(sample((70:100)/100,19,replace=TRUE),each=10)

3 使用概率采样on timelate

DF$attend = sapply(DF$prob,function(x) {sample(c("on time","late"),prob = c(x,1-x),1)})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-16
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多