gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:05:33 26 4
gpt4 key购买 nike

我的目标


我的目标是根据指数,找到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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com