在我的实验中,我想随机进行治疗.

Grain <- tibble::tibble(
  Variety = rep(c("CV1", "CV2"), each = 4L),
  `N rate` = rep(c("0N", "50N", "100N", "150N"), 2),
  `Rep 1` = seq(101, 108, by = 1),
  `Rep 2` = seq(201, 208, by = 1),
  `Rep 3` = seq(301, 308, by = 1),
  `Rep 4` = seq(401, 408, by = 1),
)


Variety N rate  Rep 1   Rep 2   Rep 3   Rep 4
CV1     0N      101     201     301     401
CV1     50N     102     202     302     402
CV1     100N    103     203     303     403
CV1     150N    104     204     304     404
CV2     0N      105     205     305     405
CV2     50N     106     206     306     406
CV2     100N    107     207     307     407
CV2     150N    108     208     308     408

所以,我使用了以下代码:

library(dplyr)      
set.seed(123)       
Grain_randomized <- Grain %>%
  group_by(Variety) %>%
  mutate(across(starts_with("Rep"), ~ sample(.x))) %>%
  ungroup()
Grain_randomized

Variety N rate  Rep 1   Rep 2   Rep 3   Rep 4
CV1     0N      103     203     304     403
CV1     50N     104     201     301     402
CV1     100N    101     202     303     401
CV1     150N    102     204     302     404
CV2     0N      107     206     305     405
CV2     50N     106     205     308     406
CV2     100N    108     208     307     408
CV2     150N    105     207     306     407

它是随机的,但CV1总是以第一个数字开始,例如101,201,301,401.我希望这些变量也是随机的,但每个变量的数字应该是连续的,如下所示.

 Variety    N rate  Rep 1   Rep 2   Rep 3   Rep 4
    CV1     0N      103     206     304     407
    CV1     50N     104     205     301     408
    CV1     100N    101     207     303     406
    CV1     150N    102     208     302     405
    CV2     0N      107     201     305     402
    CV2     50N     106     204     308     401
    CV2     100N    108     202     307     403
    CV2     150N    105     203     306     404

你能帮助我如何随机化像上表一样的变量吗?

谢谢,

推荐答案

扩展Jay.sf's answer,我们有:

for (j in grep('^Rep\\s\\d$', names(Grain))) {
     Grain[[j]] <- ave(Grain[[j]][order(match(Grain$Variety,sample(unique(Grain$Variety))))], Grain$Variety, FUN=sample)
}
Grain

# A tibble: 8 × 6
  Variety `N rate` `Rep 1` `Rep 2` `Rep 3` `Rep 4`
  <chr>   <chr>      <dbl>   <dbl>   <dbl>   <dbl>
1 CV1     0N           103     203     306     406
2 CV1     50N          101     201     305     407
3 CV1     100N         104     204     308     405
4 CV1     150N         102     202     307     408
5 CV2     0N           107     206     303     401
6 CV2     50N          106     205     301     403
7 CV2     100N         105     207     302     402
8 CV2     150N         108     208     304     404

等效(单位:dhrr):

Grain_randomized <- Grain %>%
  mutate(across(starts_with("Rep"), ~ ave(.x[order(match(Variety,sample(unique(Variety))))],Variety,FUN=sample)))

# A tibble: 8 × 6
  Variety `N rate` `Rep 1` `Rep 2` `Rep 3` `Rep 4`
  <chr>   <chr>      <dbl>   <dbl>   <dbl>   <dbl>
1 CV1     0N           102     204     306     401
2 CV1     50N          103     201     307     402
3 CV1     100N         101     203     308     403
4 CV1     150N         104     202     305     404
5 CV2     0N           108     206     302     407
6 CV2     50N          106     205     304     406
7 CV2     100N         107     208     301     405
8 CV2     150N         105     207     303     408

R相关问答推荐

如何删除多个.CSV文件的行

r中的stat_difference函数不起作用

计算R中的威布尔分布的EDF

如何使用R对每组变量进行随机化?

RStudio中相关数据的分组箱形图

在rpart. plot或fancyRpartPlot中使用带有下标的希腊字母作为标签?

如何读取CSV的特定列时,给定标题作为向量

R -如何分配夜间GPS数据(即跨越午夜的数据)相同的开始日期?

R如何将列名转换为更好的年和月格式

如何创建累加到现有列累计和的新列?

为什么我对圆周率图的蒙特卡罗估计是空的?

如何预测原始数据集并将值添加到原始数据集中

有没有办法将基于每个值中出现的两个关键字或短语的字符串向量重新编码为具有这两个值的新向量?

访问数据帧中未定义的列时出现R错误

如何使用ggplot2根据绘图中生成的斜率对小平面进行排序?

是什么打破了此Quarto仪表板中的工具提示?

我怎么才能把一盘棋变成一盘棋呢?

在shiny /bslb中,当卡片是从json生成时,如何水平排列卡片?

向内存不足的数据帧添加唯一行

当y为负值时,无法使stat_cor正确定位到底部?