我有 9 个测试,4 个级别。我的目标是打乱测试和关卡顺序,确保每个 9 个测试序列仅包含一次测试。我想重复几次(例如 14 次)。
这是我的数据框的示例:
测试 | 级别 |
---|---|
C | 1 |
V | 1 |
OB | 1 |
唷 | 1 |
国标 | 1 |
总经理 | 1 |
SA | 1 |
SG | 1 |
T | 1 |
C | 2 |
V | 2 |
OB | 2 |
唷 | 2 |
国标 | 2 |
总经理 | 2 |
SA | 2 |
SG | 2 |
T | 2 |
C | 3 |
V | 3 |
OB | 3 |
唷 | 3 |
国标 | 3 |
总经理 | 3 |
SA | 3 |
SG | 3 |
T | 3 |
C | 4 |
V | 4 |
OB | 4 |
唷 | 4 |
国标 | 4 |
总经理 | 4 |
SA | 4 |
SG | 4 |
T | 4 |
这是我要创建的数据框的示例:
序列 | 重复1 | 重复2 |
---|---|---|
1 | C2 | OB2 |
1 | GB4 | T2 |
1 | GM1 | SA2 |
1 | OB1 | V1 |
1 | OM1 | OM2 |
1 | SA4 | GM3 |
1 | SG4 | SG2 |
1 | T4 | GB4 |
1 | V4 | C1 |
2 | C1 | C4 |
2 | GB3 | GB2 |
2 | GM4 | OM3 |
2 | OB4 | SG1 |
2 | OM3 | V2 |
2 | SA1 | OB4 |
2 | SG3 | SA4 |
2 | T2 | GM2 |
2 | V2 | T1 |
3 | C4 | T3 |
3 | GB2 | C3 |
3 | GM2 | OB3 |
3 | OB2 | GM1 |
3 | OM2 | SA1 |
3 | SA2 | OM2 |
3 | SG2 | GB1 |
3 | T1 | V3 |
3 | V1 | SG4 |
4 | C3 | OM1 |
4 | GB1 | V4 |
4 | GM3 | OB1 |
4 | OB3 | C2 |
4 | OM4 | GB3 |
4 | SA3 | T4 |
4 | SG1 | SG3 |
4 | T3 | SA3 |
4 | V3 | GM4 |
我尝试了以下操作,使用 df 作为我的数据框(基于之前的 stackoverflow 答案:根据使用 R 的条件对数据框中的行进行随机排列):
df$code<-paste(df$test,df$level)
set.seed(123)
H1 <- df %>%
split(f = as.factor(.$test)) %>%
map_dfr(~sample(.x$code)) %>%
pivot_longer(everything(),
names_to = "test",
values_to = "code")
def <- H1$code
repetition = 1
while (repetition < 15){
tempo <- df %>%
split(f = as.factor(.$test)) %>%
map_dfr(~sample(.x$code)) %>%
pivot_longer(everything(),
names_to = "test",
values_to = "code")
def <- cbind(def, tempo$code)
repetition = repetition + 1
}
def <- as.data.frame(def)
def['sequence'] <- NA
def[c(1:9), 15] = "1"
def[c(10:18), 15] = "2"
def[c(19:27), 15] = "3"
def[c(28:36), 15] = "4"
忘记了它可能不是很优雅这一事实,这段代码只能部分工作。我确实得到了一个包含 15 列的数据框。对于 9 个测试的每个序列,我没有重复相同的测试,并且列内和列之间的级别顺序得到了很好的洗牌。但是,所有列都具有相同的测试顺序。这是我获得的数据框的示例:
非常感谢您的帮助!
library(dplyr)
set.seed(42)
df %>%
mutate(repetition := replicate(14,
paste0(sample(test[level==1]), sample(level))))
输出
test level repetition.1 repetition.2 repetition.3 repetition.4 repetition.5
1 C 1 C3 OB1 OM3 SG4 C4
2 V 1 GB1 SG1 C4 SA4 GB2
3 OB 1 T3 SA3 T2 OB4 OB3
4 OM 1 SA3 C4 V4 GM4 GM4
5 GB 1 V3 GB3 GM2 GB1 V3
6 GM 1 OM2 V1 OB2 OM3 SA1
7 SA 1 SG2 OM3 SG1 C4 OM4
8 SG 1 OB1 T2 SA3 V4 T2
9 T 1 GM1 GM1 GB3 T3 SG4
10 C 2 C4 OB1 OM2 SG2 C1
11 V 2 GB1 SG1 C4 SA1 GB4
12 OB 2 T1 SA2 T4 OB2 OB2
13 OM 2 SA2 C1 V1 GM3 GM3
14 GB 2 V3 GB1 GM3 GB2 V4
15 GM 2 OM4 V2 OB1 OM1 SA1
16 SA 2 SG1 OM4 SG1 C1 OM3
17 SG 2 OB1 T1 SA2 V3 T3
18 T 2 GM4 GM2 GB2 T4 SG1
... etc