我正在尝试为今年夏天进行的实验生成随机抽样方案。在此方案中,我正在每个地点针对特定年龄的每个燕窝进行四个实验。每个巢的试验必须是随机的,但是所有巢都必须经历所有四个不同的试验(即随机顺序,而不是随机试验类型)。
到目前为止,我有: -两个站点名称重复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
我该如何解决?
如果您可以帮助我进行设置,以便将所有试验都放在一个单独的栏中,而不是将所有试验放在一个栏中,则奖励积分。
答案 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)))