问题描述
问题
我有一个数据框,我使用 lpSolve
来解决背包问题。我希望创建从特定玩家的向量生成的自定义列,以满足新的约束。如果解决方案中没有至少一名来自他们的 TEAM
的其他玩家,则这些玩家(“依赖玩家”)不会出现在最佳解决方案中。这是我希望创建此约束的方式:
列条件
从属玩家向量:D = c("195977","119921","176896","125632")
新列必须满足以下条件:
- 每个依赖玩家都用于根据他们的
PLAYERID
(列名称:D195977
、D119921
等)创建一个新列。 - 在新列中为依赖玩家分配了
-1
的值。 - 同一
TEAM
上的所有其他玩家在新列中都被分配了1
的值。 - 与依赖玩家不在同一个
TEAM
的玩家在新列中被分配了0
的值。 - 具有
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 (将#修改为@)