我有一个3列的数据框(实际上是约2000行)。我想返回A列的值,该列在B列中的最高总得分最高,但限制了C列中的最大值。例如:
colName col1 col2
John 7 50
Jim 3 25
James 2 25
Peter 9 110
Robert 1 75
Hank 1 75
假设col2的最大总和为100。col1中组合值的最高组合为7 + 3 + 2 = 12。 我想返回将要返回的名称列表: 约翰,吉姆,詹姆斯
Q1:我该怎么做?
Q2:或者,返回数据框的整个行以及数据框中最大可能组合的值会很有趣:
colName col1 col2
John 7 50
Jim 3 25
James 2 25
答案 0 :(得分:1)
您所指的是0/1 knapsack problem。 adagio
软件包在R中实现了背包求解器。
> tbl
# A tibble: 6 x 3
colName col1 col2
<chr> <int> <int>
1 John 7 50
2 Jim 3 25
3 James 2 25
4 Peter 9 110
5 Robert 1 75
6 Hank 1 75
> tbl <- tbl[tbl$col2 <= 100, ] # `adagio` will complain otherwise
> soln <- knapsack(tbl$col2, tbl$col1, 100)
> tbl[soln$indices, ]
# A tibble: 3 x 3
colName col1 col2
<chr> <int> <int>
1 John 7 50
2 Jim 3 25
3 James 2 25