r - 使用 R dplyr 根据多个条件找到最佳组合

标签 r dplyr data.table tidyverse tidyr

我的目标


我的目标是根据指数,找到10 位玩家 的最佳组合,这些玩家的总分 在 95.5-100.4 之间.

细节


有一个重要的细节。从 10 名球员中,根据角色列,应该有 2C(两名中锋)、4F(四名前锋)、4*G(四名后卫)。

Atm 我正在为循环而苦苦挣扎,但我确信 dplyr 包中有一些我遗漏的亮点。非常感谢任何帮助或指导。

set.seed(123)
players <- paste("player",rep(1:20))
score <- runif(20, min=4, max=16.7)
index <- runif(20, min=-1, max=9)
role <- rep(c("C","F","F","G","G"),4)

df <- data.frame(players, score, index,role)
df
#>      players     score      index role
#> 1   player 1  7.652235  7.8953932    C
#> 2   player 2 14.011475  5.9280341    F
#> 3   player 3  9.194007  5.4050681    F
#> 4   player 4 15.214321  8.9426978    G
#> 5   player 5 15.943935  5.5570580    G
#> 6   player 6  4.578568  6.0853047    C
#> 7   player 7 10.706940  4.4406602    F
#> 8   player 8 15.333722  4.9414202    F
#> 9   player 9 11.003225  1.8915974    G
#> 10 player 10  9.799007  0.4711365    G
#> 11 player 11 16.151783  8.6302423    C
#> 12 player 12  9.757344  8.0229905    F
#> 13 player 13 12.605147  5.9070528    F
#> 14 player 14 11.272444  6.9546742    G
#> 15 player 15  5.307143 -0.7538632    G
#> 16 player 16 15.427777  3.7779597    C
#> 17 player 17  7.125314  6.5845954    F
#> 18 player 18  4.534156  1.1640794    F
#> 19 player 19  8.164593  2.1818101    G
#> 20 player 20 16.122196  1.3162579    G

reprex package 创建于 2021-10-16 (v2.0.1)

谢谢你的时间

更新:


到目前为止我的逻辑是:

  1. 转置我的df
df <- as.data.frame(t(df))
  1. 并创建 10 个玩家的所有可能组合
combn(df, 10, simplify=FALSE)

现在我需要选择合适的角色和角色的列表 总和在 95.5-100.4 之间。该死的应该有一个更聪明的方法。

最佳答案

我认为一个有效的方法是使用蒙特卡洛方法(不需要构建所有可能组合的完整数据集),我们在通过随机抽样找到所需输出后停止搜索

repeat {
  idx <- unlist(
    Map(
      sample,
      split(1:nrow(df), df$role),
      c(2, 4, 4)
    )
  )
  s <- sum(df$score[idx])
  if (s >= 95.5 & s <= 100.4) break
}
df[sort(idx), ]

关于r - 使用 R dplyr 根据多个条件找到最佳组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69597231/

相关文章:

r - 从R中的列表绘制数据

rlist : recursively filter out list nodes with NA

R:计算列可互换的数据框中的不同组合

R:data.table 比较行集

r - 在 R data.table 中创建参数化函数

r - 尽管+ geom_line() 图表中没有线条

r - 不带逗号跳过行

r - 计算特定值的变量中值发生变化的次数

mysql - 如何根据 R Mysql DB 中的时间戳删除表?

r - 如何使用by将所有列暴露给data.table的子集并将其暴露给该函数?