【问题标题】:selecting factors from a list without replacement从列表中选择因子而不替换
【发布时间】:2015-10-04 02:42:50
【问题描述】:

我正在编写一个脚本,该脚本会在给定一组可供选择的球员和每个位置的名册限制的情况下自动进行模拟体育选秀。

如果我有三个团队从以下数据框架中起草,我将如何构建这样的脚本?

团队 1 使用的排名与使用共识的团队 2 和 3 不同;每支球队将选秀一名“QB”和一名“RB”,每位球员只能选秀一次(不得更换)。

在我看来,输出将是单个数据框。

players <- c("Dan Marino", "Tony Dorsett", "Joe Montana", "John Elway",
 "Jim Brown", "Barry Sanders")
position <- c("QB", "RB", "QB", "QB", "RB", "RB")
Team1_rank <- c(2,4,5,6,3,1)
consensus_rank <- c(1,6,3,5,2,4)
player_pool <- data.frame(players, position, Team1_rank, consensus_rank)

            players position Team1_rank consensus
1    Dan Marino       QB          2         1
2  Tony Dorsett       RB          4         6
3   Joe Montana       QB          5         3
4    John Elway       QB          6         5
5     Jim Brown       RB          3         2
6 Barry Sanders       RB          1         4

【问题讨论】:

  • 添加一列(布尔值)以表明球员是否已经被选中。然后轮到每支球队,他们选择drafted 不为TRUE 的最高排名(按他们的排名列)的球员。把它放在一个 for 循环中。

标签: r


【解决方案1】:

如果要对数据帧的行进行采样,请在 i 索引上使用 sample(),即

player_pool[sample(6,6), ]

将随机重新排列数据帧。如果您只想要每种类型的播放器的特定数量,我会首先将数据框划分为单独的播放器类型,然后对每个播放器类型进行排序。您还可以在 sample() 中指定每个选择的概率(参见 ?sample)

如果您希望列表随着时间的推移而减少,您可以设置

player_pool <- player_pool[sample(nrow(player_pool),nrow(player_pool)),]

pick <- player_pool[1,]

player_pool <- player_pool[2:nrow(player_pool),]

在一个循环中。

【讨论】:

  • 循环很棒!所以我明白,选择是 data.frame 中的第一行,然后你创建一个新的 data.frame 名称,但这次是第 2:n 行?如果不想随机抽样列表怎么办?在我的示例中,第 1-3 队根据球员的可用性知道他们接下来想选哪个球员。有没有办法非随机抽样?
  • 您可以在示例函数sample(nrow(player_pool),nrow(player_pool), prob = c(.5,.2,....)) 中设置每个选择的概率,如果它解决了您的问题,您介意将答案作为解决方案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 2016-12-31
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多