【发布时间】:2015-12-31 11:36:37
【问题描述】:
经过相当多的谷歌努力,我希望有人可以帮助我解决这个问题,这对我来说似乎很简单,但可能比我想象的要复杂:
我有一个包含三列的 data.frame。前两个反映了五个变量 (1-5) 的所有可能组合,最后一个反映了组合的“强度”。我查找五行,其中包括 Var1 和 Var2 的所有值(因此值为 1-5),并且在强度列中具有最高的总和。在下面的示例中,它是强度为 1000 的五行,因为它们的总和最高,并且前两列中给出了所有五个值 (1-5)。
如何最好地解决这个问题?是否有实现该任务的包?我现在找到了 constrOptim() 函数,我可以用它来做吗?
创建示例数据框的代码:
a <-cbind(expand.grid(seq(1,5,1),seq(1,5,1)),
strength = c(-11, 61, 230, 118, 156, 98, 169, 306, 6, -54,
207, -32, 27, 128, 101, 19, -18, 32, 153, 14,
63, 136, 165, 73, 35))
a <- a[order(a$strength, decreasing=T),]
起始数据集:
Var1 Var2 strength
3 2 306
3 1 230
1 3 207
2 2 169
3 5 165
5 1 156
4 4 153
2 5 136
4 3 128
4 1 118
5 3 101
1 2 98
4 5 73
1 5 63
2 1 61
5 5 35
3 4 32
3 3 27
1 4 19
5 4 14
4 2 6
1 1 -11
2 4 -18
2 3 -32
5 2 -54
不想要的结果:
Var1 Var2 strength
3 2 306
3 1 230
1 3 207
2 2 169
3 5 165
期望的结果:
Var1 Var2 strength
3 2 306
1 3 207
5 1 156
4 4 153
2 5 136
【问题讨论】:
-
你能显示预期的输出吗?
-
问题出在“所有变量都在第一列和第二列中使用......”。这是什么意思?
-
最终解决方案应该有五行。前两列 (v1,v2) 都应该包含从 1 到 5 的所有值。这说明清楚了吗?我可以发布一个我以后知道解决方案的示例。这个例子是随机的,因此我不知道解决方案。谢谢!
-
如果你不知道答案应该是什么样子,你怎么知道它是否正确?
-
看来问题是如何排序并取前5个结果: set.seed(4444) a
标签: r select optimization combinations nonlinear-optimization