创建具有条件值的新列来解决背包问题

问题描述

问题

我有一个数据框,我使用 lpSolve解决背包问题。我希望创建从特定玩家的向量生成自定义列,以满足新的约束。如果解决方案中没有至少一名来自他们的 TEAM 的其他玩家,则这些玩家(“依赖玩家”)不会出现在最佳解决方案中。这是我希望创建此约束的方式:

列条件

从属玩家向量:D = c("195977","119921","176896","125632")

新列必须满足以下条件:

  1. 每个依赖玩家都用于根据他们的 PLAYERID(列名称D195977D119921 等)创建一个新列。
  2. 在新列中为依赖玩家分配了 -1 的值。
  3. 同一 TEAM 上的所有其他玩家在新列中都被分配了 1 的值。
  4. 与依赖玩家不在同一个 TEAM 的玩家在新列中被分配了 0 的值。
  5. 具有 POS == "SP" 的玩家在新列中被分配了 0 的值,而不管他们的 TEAM

其他信息

如果相同的球员 (PLAYER) 打多个位置 (POS),他们会在数据框中多次出现。这反映在下面的数据框(和所需的结果)中。

数据框

    PLAYERID  PLAYER              TEAM  POS
1   195977    Tomas Nichols       BOS   2B
2   177636    Dominic Pierce      BOS   OF
3   177483    Jeremiah Underwood  NYY   OF
4   171422    Lucas Rodriguez     BOS   OF
5   119921    Gerald Valdez       NYY   SS
6   118267    Seth soto           NYY   SP
7   111611    Thomas Fleming      BOS   SS
8   179258    Grady Stanley       NYY   C
9   184993    Ian Knight          BOS   3B
10  193424    Harold Schmidt      NYY   1B
11  191445    Doug Moss           BOS   SP
12  176896    Edward Jenkins      BOS   C
13  125632    Eddie Murphy        NYY   OF
14  152094    Curtis Duncan       NYY   OF
15  138180    Benny Newman        NYY   3B
16  143757    Maurice Swanson     BOS   OF
17  143732    Ruben Pittman       BOS   1B
18  173376    Jordan Obrien       NYY   1B
19  125632    Eddie Murphy        NYY   1B
20  171422    Lucas Rodriguez     BOS   C
[...]

想要的结果

基于依赖玩家向量和上面的数据框:

    PLAYERID  PLAYER              TEAM  POS  D195977  D119921  D176896  D125632
1   195977    Tomas Nichols       BOS   2B   -1       0        1        0
2   177636    Dominic Pierce      BOS   OF   1        0        1        0
3   177483    Jeremiah Underwood  NYY   OF   0        1        0        1
4   171422    Lucas Rodriguez     BOS   OF   1        0        1        0
5   119921    Gerald Valdez       NYY   SS   0        -1       0        1
6   118267    Seth soto           NYY   SP   0        0        0        0
7   111611    Thomas Fleming      BOS   SS   1        0        1        0
8   179258    Grady Stanley       NYY   C    0        1        0        1
9   184993    Ian Knight          BOS   3B   1        0        1        0
10  193424    Harold Schmidt      NYY   1B   0        1        0        1
11  191445    Doug Moss           BOS   SP   0        0        0        0
12  176896    Edward Jenkins      BOS   C    1        0        -1       0
13  125632    Eddie Murphy        NYY   OF   0        1        0        -1 
14  152094    Curtis Duncan       NYY   OF   0        1        0        1 
15  138180    Benny Newman        NYY   3B   0        1        0        1
16  143757    Maurice Swanson     BOS   OF   1        0        1        0 
17  143732    Ruben Pittman       BOS   1B   1        0        1        0
18  173376    Jordan Obrien       NYY   1B   0        1        0        1
19  125632    Eddie Murphy        NYY   1B   0        1        0        -1
20  171422    Lucas Rodriguez     BOS   C    1        0        1        0
[...]

问题

在给定原始数据框和相关玩家向量的情况下,如何创建这些新列和值?谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)