質問

さて、私はRにかなり新しいだと私は私が何をする必要があるかのドキュメントを検索しようとしましたが、ここで問題です。

私は、次の形式でheeds.data呼ばdata.frame(簡略化のため省略いくつかの列)を持っています eval.num、eval.count、...フィットネス、fitness.mean、green.h.0、green.v.0、offset.0、green.h.1、green.v.1、...緑。 H.7、green.v.7、offset.7 ...

そして、私は次の基準を満たす行を選択しています:

best.fitness <- min(heeds.data$fitness.mean[heeds.data$eval.count >= 10])
best.row <- heeds.data[heeds.data$fitness.mean == best.fitness]

さて、私が欲しいものoffset.7に列green.h.0(列の連続した部分)を持っていると、他のすべての行はbest.row

に等しいです

私はこれかもしれない仕事を考えていた。

heeds.best <- heeds.data$fitness[
  heeds.data$green.h.0 == best.row$green.h.0 & ...
]

しかし、それは愚かな方法のように思える24個の列を持ちます。以下の手動入力と少しシンプルな何かを探しています。

ここで私が欲しいものを表示する短いデータサンプルがある

eval.num, eval.count, fitness, fitness.mean, green.h.0, green.v.0, offset.0
1         1           1500     1500          100        120        40
2         2           1000     1250          100        120        40
3         3           1250     1250          100        120        40
4         4           1000     1187.5        100        120        40
5         1           2000     2000          200        100        40
6         1           3000     3000          150        90         10
7         1           2000     2000          90         90         100
8         2           1800     1900          90         90         100

の行として「最高」を選択してください4 それから私は、次のような結果を取得したい。

eval.num, eval.count, fitness, fitness.mean, green.h.0, green.v.0, offset.0
1         1           1500     1500          100        120        40
2         2           1000     1250          100        120        40
3         3           1250     1250          100        120        40
4         4           1000     1187.5        100        120        40
データが実際にソートされていないと、より多くの列があるが、それがコンセプトです。

ありがとうございます。

役に立ちましたか?

解決

あなたの質問は、のちょうどの複雑なインデックスの質問本質的です。シンプルなものがあるかもしれませんが、私はここで解決策を持っています。私はDFにあなたの例のデータをロードします:

まず、これは私たちに(簡単which.min()を使用して)最適な行のインデックスを取得します

R> bind <- which.min(DF[,"fitness.mean"])  # index of best row

次に、我々は、(単に7に位置5によってここでは気に列のサブセット上、インデックス)行ごとの比較をapply()

我々は、すべての要素が対応する行を取得するために、現在の(cmpfunによってインデックス付け)最適な行へ行r及び使用bindを比較する比較関数all()を使用します。 [私たちは、両側に、それが同等にするためにここにdrop=FALSE必要が、それ以外のas.numeric()ができます。

R> cmpfun <- function(r) all(r == DF[bind,5:7,drop=FALSE])  # compare to row bind

これは単純に、この行単位をapply

R> brows <- apply(DF[,5:7], 1, cmpfun)

そして、これらは私たちが望んでいた行があります:

R> DF[brows, ]
  eval.num eval.count fitness fitness.mean green.h.0 green.v.0 offset.0
1        1          1    1500         1500       100       120       40
2        2          2    1000         1250       100       120       40
3        3          3    1250         1250       100       120       40
4        4          4    1000         1188       100       120       40
R> 

これは問題で我々は比較のために3つの列を使用することをしませんでした - すべてのことが大事我々は我々が望んでいたの列のインデックス式(ここでは5:7)を持っていたということです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top