我是R的新手,我正在尝试使用for
循环在R中自动化蛇形草案。从本质上讲,我想采用一个包含9列的向量(对于9支球队中的每支球队),然后选择该列中的第一个可用球员(所有9支球队都有相同的36名球员的顺序;排名每个球队队长的感觉如何玩家将执行)并将其放入一个空白矩阵,最终将所有团队最终确定。
正如我所说,有9支球队各自起草4名球员。因为这是一个蛇选,“选择顺序”就像这样:
一直到
然后回到
因为有9名队长和36名球员可供选择,每支球队最终有4名球员(非重复)。我希望我已经解释得这么好了。我喜欢这个网站,感谢您的帮助!
答案 0 :(得分:1)
这是一个建议的解决方案。不是最优雅的外观,但应该适用于您的问题:
players <- paste0("player", 1:36)
picks<-sample(players, 36)
draft <- matrix(NA, ncol=9, nrow=4)
for(i in 1:4){
if(i %in% c(1,3)) draft[i, 1:9] <- picks[(9*(i-1)+1):(9*(i-1)+ 9)]
if(i %in% c(2,4)) draft[i, ] <- rev(picks[(9*(i-1)+1):(9*(i-1)+ 9)])
}
draft
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] "player4" "player12" "player29" "player10" "player19" "player26" "player3" "player21" "player20"
[2,] "player17" "player7" "player9" "player5" "player6" "player23" "player15" "player35" "player13"
[3,] "player36" "player34" "player28" "player32" "player33" "player27" "player30" "player31" "player8"
[4,] "player11" "player22" "player2" "player18" "player24" "player25" "player16" "player1" "player14"
答案 1 :(得分:0)
这是一个相当可读的版本:
set.seed(47)
players <- cbind(replicate(9, sample(1:36)), ID = 1:36) # column 10 is ID column
pick <- matrix(NA, 4, 9) # matrix to fill
for(round in 1:4){
direction <- if(round %% 2 == 1) {1:9} else {9:1}
for(team in direction){
pick[round, team] <- players[which.min(players[, team]), 'ID'] # store pick
players <- players[-which.min(players[, team]), , drop = FALSE] # erase player's row
}
}
pick # rows are rounds, columns are teams, numbers are player IDs
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
# [1,] 18 5 20 6 27 36 24 34 26
# [2,] 19 28 32 1 23 33 30 2 17
# [3,] 21 15 8 9 13 7 35 31 14
# [4,] 16 3 4 22 10 11 29 25 12