2

参加者(RECORDING_SESSION_LABEL)とtrial_numberで並べ替える必要のあるデータセットがあります。ただし、Rを使用してデータを並べ替える場合、どの並べ替え関数も、必要な正しい番号順に変数を配置しようとしませんでした。参加者変数は正常に出力されますが、トライアルID変数は必要な順序で間違った順序で出力されます。

使用: fix_rep[order(as.numeric(RECORDING_SESSION_LABEL), as.numeric(trial_number)),]

参加者IDは次のようになります。

118118118など211211211など306306306など(大丈夫です)

trial_numberは次のようになります。

1 1 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 2 2 20 20 ....(これは私が望むものではありません-数値ではなく字句的にソートしているようです)

私が望むのは、各参加者番号内で、trial_numberを次のように並べ替えることです。

1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 1111...。

これらの変数が因子ではなく数値であり、「as.numeric」なしで試してみましたが、喜びはありませんでした。周りを見回すと、「順序」の代わりにトリックを実行する可能性があるという提案がsort()あり、どちらもエラーが発生します。mixedsort()簡単なことだと思うものの上にゆっくりと髪を引っ張っています。誰かが私が必要なものを手に入れるためにこれを行う方法に光を当てるのを手伝ってもらえますか?

4

2 に答える 2

2

あなたがそれが要因ではないと主張したとしても、それはそれが要因であるかのように正確に振る舞います。因子はレベル属性とクラスラベルを持つ単なる整数ベクトルであるため、何かが因子であるかどうかをテストするのは難しい場合があります。それが要因である場合、コードは:as.character()内にネストされた呼び出しを行う必要があります。as.numeric()

fix_rep[order(as.numeric(RECORDING_SESSION_LABEL), as.numeric(as.character(trial_number))),]

それが要因であるかどうかを本当に確認するために、次のstr()関数 をお勧めします。str(trial_number)

于 2012-07-06T13:20:22.230 に答える
0

この場合、独自の関数を設計することは価値があると思います。それもそうではないでしょ難しいですが、基本的には、いくつかの変更を加えてバブルソートアルゴリズムを設計することができます。これらの変更により、各数値が文字列に変更され、桁数の異なるものを異なるビンに並べ替えることから始めることができます(現在は文字列になっている、インデックスの数が最も多い数値を見つけることで簡単に実行できます)。次に、同様の方法で、これらのビンの数値を、最下位桁を数値タイプに変換し、どれが最大/最小かを確認することによってソートできます。興味があれば、このためのコードを思いつくこともできますが、上記の2つは、いくつかの組み込み関数で私を打ち負かしたようです。私はこれらの機能を使ったことがないので、意図したとおりに機能するかどうかはわかりませんが、車輪の再発明には意味がありません。

于 2012-07-06T13:26:47.073 に答える