R语言 根据第2列中的最大值,查找第1列中的最大值组合

vohkndzv  于 2023-06-27  发布在  其他
关注(0)|答案(1)|浏览(125)

我有一个3列的dataframe(实际上大约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

假设col 2的最大total/sum值为100。col 1中组合值的最高组合将是7+3+2=12。我想返回将返回的姓名列表:约翰,吉姆,詹姆斯
Q1:我该怎么做?
Q2:或者,返回dataframe中具有最高可能组合的值的dataframe的整个行会很有趣:

colName    col1  col2
    John     7      50
    Jim      3      25
    James    2      25
jdgnovmf

jdgnovmf1#

你所指的是一个 *0/1背包问题 *。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

相关问题