生成重复的随机抽样

时间:2019-05-15 10:43:47

标签: r random

我正在尝试为今年夏天进行的实验生成随机抽样方案。在此方案中,我正在每个地点针对特定年龄的每个燕窝进行四个实验。每个巢的试验必须是随机的,但是所有巢都必须经历所有四个不同的试验(即随机顺序,而不是随机试验类型)。

到目前为止,我有: -两个站点名称重复80次的向量 -带有嵌套的向量(每个位置20个潜在的嵌套)重复4次 -具有年龄(4个不同时期)的向量重复40次

sites <- c(rep("AU", times = 80), rep("WE", times = 80)) 
nest <- c(rep(1:20, each = 4), rep(1:20, each = 4))
age <- rep(c("3/4", "7/8", "11/12", "15/16"), times = 40)df <- 

data.frame(cbind(sites, nest, age))
head(df)

  sites nest   age
1    AU    1   3/4
2    AU    1   7/8
3    AU    1 11/12
4    AU    1 15/16
5    AU    2   3/4
6    AU    2   7/8

对于每个巢的最后一次随机采样,我需要选择1到4次试验。我尝试了以下操作:

trial <- rep(sample(1:4, 4, replace=FALSE), times = 40) #creates the same random order for each nest
trial <- rep(sample(1:4, 4, replace=FALSE), each = 40) #repeats the same number 40 times, before selecting the next one

我该如何解决?

如果您可以帮助我进行设置,以便将所有试验都放在一个单独的栏中,而不是将所有试验放在一个栏中,则奖励积分。

1 个答案:

答案 0 :(得分:1)

replicate解决了每次生成不同订单的问题。它不会重复相同的表达式,它将调用该表达式expr n次。

set.seed(1234)    # Make the results reproducible
trials1 <- replicate(40, sample(4))

要将试验作为列,只需转置结果矩阵即可。

trials2 <- t(trials1)
colnames(trials2) <- sprintf("trial_%02d", seq_len(ncol(trials2)))