gpt4 book ai didi

R:如何在没有替换且没有连续相同值的情况下进行采样

转载 作者:行者123 更新时间:2023-12-02 06:59:13 25 4
gpt4 key购买 nike

我花了一天多的时间试图完成一件看似非常简单的事情。我必须创建 300 个“随机”序列,其中数字 1、2、3 和 4 都恰好出现 12 次,但同一个数字绝不会“连续”/连续使用两次。

我最好的尝试(我猜)是:

  1. 对 R 样本 48 个不放回的项目,测试是否存在带有 rle 的连续值,然后仅使用不包含连续值的序列。问题:几乎没有满足此标准的随机序列,因此需要很长时间。

  2. 让 R 创建没有连续值的序列(参见代码)。

pop<-rep(1:4,12)
y=c()
while(length(y)!=48)
{
y= c(y,sample(pop,48-length(y),replace=F))
y=y[!c(FALSE, diff(y) == 0)]
}

问题:这会创建每个值的数量不同的序列。然后,我尝试仅使用每个值恰好为 12 的序列,但这只会让我回到问题 1:永远需要。

一定有一些简单的方法可以做到这一点,对吧?非常感谢任何帮助!

最佳答案

也许使用带有repeat循环的replicate()会更快。这是一个包含 3 序列的示例。看起来这需要大约。 1490 秒,300(未测试)。

set.seed(42)
seqc <- rep(1:4, each=12) # starting sequence

system.time(
res <- replicate(3, {
repeat {
seqcs <- sample(seqc, 48, replace=FALSE)
if (!any(diff(seqcs) == 0)) break
}
seqcs
})
)
# user system elapsed
# 14.88 0.00 14.90

res[1:10, ]
# [,1] [,2] [,3]
# [1,] 4 2 3
# [2,] 1 1 4
# [3,] 3 2 1
# [4,] 1 1 4
# [5,] 2 3 1
# [6,] 4 1 2
# [7,] 3 4 4
# [8,] 2 1 1
# [9,] 3 4 4
# [10,] 4 3 2

关于R:如何在没有替换且没有连续相同值的情况下进行采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58540423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com