首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Rstudio在五个模块中随机进行治疗,而不重复治疗?

如何使用Rstudio在五个模块中随机进行治疗,而不重复治疗?
EN

Stack Overflow用户
提问于 2021-02-10 23:01:38
回答 1查看 49关注 0票数 0

在果园试验中,共设5个处理和5个小区。为了分析这些处理对树木和果实生长的影响,在中间树排的两边的处理都是相同的。我如何随机化R中的治疗,而不使一个块的最后一个处理与下一个块的开始处理相同。例如,我使用agricolae软件包对其区块内的治疗进行随机化,但我得到的随机化如下:

代码语言:javascript
复制
Block 1: 3 1 5 2 4 
Block 2: 2 3 4 5 1
Block 3: 2 5 1 4 3 
Block 4: 1 5 3 4 2
Block 5: 2 3 1 5 4

正如你所看到的,块4以处理2结束,然后块5以2开始。如果可能的话,我想避免这种情况,但我不确定如何在r中做到这一点。

实验的可视化表示,在他们的图中没有随机化的处理:

运行下面的解决方案,我遇到了新表没有显示数字的问题。

Print screen of the command dput(head(data,20))

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-10 23:27:31

假设你有这样的数据:

代码语言:javascript
复制
head(data,10)
#     Block TreeMiddleRow
#1  Block 1   Treatment 1
#2  Block 1   Treatment 2
#3  Block 1   Treatment 3
#4  Block 1   Treatment 4
#5  Block 1   Treatment 5
#6  Block 2   Treatment 1
#7  Block 2   Treatment 2
#8  Block 2   Treatment 3
#9  Block 2   Treatment 4
#10 Block 2   Treatment 5

可以使用while循环继续按组重采样,直到所有块边界都不相等为止:

代码语言:javascript
复制
treatments <- rep("Tretment",nrow(data))
while(any(treatments[head(cumsum(rle(data$Block)$lengths),-1)] == treatments[head(cumsum(rle(data$Block)$lengths),-1)+1])){
  treatments <<- unname(unlist(tapply(data$TreeMiddleRow,
                                      data$Block,
                                      FUN = function(x) sample(x,size = 5, replace = FALSE))))
}
data$TreeMiddleRow <- treatments
head(data,10)
#     Block TreeMiddleRow
#1  Block 1   Treatment 2
#2  Block 1   Treatment 3
#3  Block 1   Treatment 4
#4  Block 1   Treatment 5
#5  Block 1   Treatment 1
#6  Block 2   Treatment 2
#7  Block 2   Treatment 5
#8  Block 2   Treatment 3
#9  Block 2   Treatment 4
#10 Block 2   Treatment 1

请注意,带有rlecumsum允许我们返回块之间边界的索引。head(x,-1)删除了最后一个,因为我们并不关心它:

代码语言:javascript
复制
head(cumsum(rle(data$Block)$lengths),-1)
#[1]  5 10 15 20

示例数据:

代码语言:javascript
复制
data <- data.frame(Block = rep(paste("Block",1:5),each = 5),
                   TreeMiddleRow = rep(paste("Treatment",1:5),times = 5))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66139428

复制
相关文章

相似问题

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