-1

可以说我有以下数据框:

a <- c(0.9,0.8,0.7)
b <- c(1000,200,20)
c <- c(10,20,10)
myframe <- data.frame(a,b,c)

1 0.9 1000 10
2 0.8  200 20
3 0.7   20 10

我知道想要找到符合以下规则的“最佳”组合:

  • a越高越好,b越低越好,c越高越好
  • a 胜过 b 胜过 c

我现在像这样订购数据框......

myframe[with(myframe, order(-a, b, -c))[1],]

...并获得以下返回值:

    a    b  c
1 0.9 1000 10

我现在想通过检查百分比偏差以及选择第二个组合的结果来使选择“最佳”解决方案的方式更加“智能”:

    a    b  c
2 0.8 200 20
  1. 数据框的更改顺序(已经实现,见上文)

    顺序(-a,b,-c)

  2. (新)检查所有行的 b 值,其中 a 不超过最佳 a 值的 15%。选择 b 值至少比当前 b 值好 50% 的线。

  3. 现在在上面的例子中选择了第 2 行。

如何做到这一点?

4

1 回答 1

1

使用提供的数据,您似乎只需要该subset功能。这是你想要达到的目标吗?

myframe[with(myframe, order(-a, b, -c))[1],]
best.a = myframe$a[1]
best.b = myframe$b[1]

subset(myframe,a > 0.85*best.a & b < 1.5*best.b)
    a    b  c
1 0.9 1000 10
2 0.8  200 20
于 2014-10-20T01:07:11.107 回答