首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:如何在以前的样本条件下采样值?

R:如何在以前的样本条件下采样值?
EN

Stack Overflow用户
提问于 2020-11-15 18:07:26
回答 1查看 184关注 0票数 0

我已经想了好几个小时了,最后我的头都白了.我的最终目标是建立一个26行4列的数据框架,其中包含的值为1-6,以半随机的方式分布,满足某些条件。

条件如下:

每个数字只能在同一列的row.

  • Neighbouring行中出现一次,
  1. 每个数字都不能包含相同的值。为此,必须将第1列和第2列视为包含两个值的同一列,这两个列都不能在相邻的行中重复。因此,如果在第1和第2列的一行中有"1 & 2“,则只能将下一行中的"3-6”与前一行中的“3-6”组合起来。
  2. 值应该在表的任何分段中均匀分布。

我最初的想法是先采样第一行,然后创建一个for循环,一个接一个地添加其他行,从而改变根据前面的示例绘制数字的概率。在添加此示例行之前,我可以检查第二个条件是否满足,如果不是重采样的话。

我最终意识到这是如此的嵌套,以至于我不能把我的头绕在它周围……我假设我需要一个while循环,但我没有经验。在前两个条件未满足的情况下,根据先前出现的可能性进行重采样。但是,问题是每一列都根据先前的外观为每个值获取了自己的概率,所以我不能只对一行进行示例。但是,如果我根据前面的表象分别对每一列进行采样,则很可能在一行中得到相同的值.

因此,这是我想要的为FALSE的条件(我尝试使用一个函数,如果语句为TRUE,它只会重复一遍):

代码语言:javascript
复制
temp[1] == table[i-1,1] || temp[1] == table[i-1,2] || temp[2] == table[i-1,1] || temp[2] == table[i-1,2]
temp[3]== table[i-1,3]
temp[4]== table[i-1,4]

下面是我如何计算抽样概率的方法(我意识到,如果还没有出现值,就会出现一个问题,因为这意味着除以0)。

代码语言:javascript
复制
probAB <- rep(1,6) /table(table[,c(1,2)])
probC <- rep(1,6) /table(table[,3])
probD <- rep(1,6) /table(table[,4])

我你想知道它应该是什么:这是一个不重复的杂务,在6人之间,2人承担1项家务,而其他2项家务仅由一人完成。为实现这一目标,我愿意听取其他建议。^^

EN

回答 1

Stack Overflow用户

发布于 2020-11-15 18:18:35

我们可以使用拒绝抽样。只需为每一行生成一个示例,如果符合条件,则接受它并转到下一行;否则,重复。

代码语言:javascript
复制
nr <- 26
nc <- 4
k <- 6

set.seed(123)

is_ok <- function(x, y) all(x != y) && x[1] != y[2] && x[2] != y[1]

tab <- matrix(NA, nr, nc)
tab[1, ] <- sample(k, nc)
for(i in 2:nr) repeat if (is_ok(tab[i, ] <- sample(k, nc), tab[i-1, ])) break
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64848004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档