web-dev-qa-db-ja.com

Rの曜日ごとの因子レベルの並べ替え

Rに次のdata.frameがあります。

_> daily
        DoW         Duration
1    Friday 14.0000000000000
2    Monday 21.0000000000000
3  Saturday 12.0000000000000
4  Thursday 28.0000000000000
5   Tuesday 12.0000000000000
6 Wednesday 91.0000000000000
7    Sunday 20.0000000000000
_

週が(米国)曜日の順序になるように、因子レベルの順序を変更したいと思います。

relevel()を使用すると、これをゆっくりと不可解な方法で実行できるようです。ただし、これは1つの数値引数のみを取り、それを先頭に移動します。したがって、relevel(daily$DoW, 7)は日曜日を一番上に移動しますが、残りは順序付けられていません(つまり、逆の順序でレベルを変更する必要があります)。

実行可能ですが、もっと良い方法があるはずですよね?

(時系列ソリューションも受け入れられます。)

19
Mittenchops

Factorでレベルを指定してから、インデックス付けでorderを使用する必要があります。

daily$DoW <- factor(daily$DoW, levels= c("Sunday", "Monday", 
    "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))

daily[order(daily$DoW), ]
22
Tyler Rinker

factorの代わりに、必要なのはOrdered.Factor

このRコードの行は、DoW変数を「順序付き係数」に変換します。

daily$DoW <- ordered(daily$DoW, levels=c("Monday", "Tuesday", "Wednesday", "Thursday", 
"Friday", "Saturday", "Sunday"))

これで、tableplot、またはDowで他の関数を使用すると、上記で指定した順序になります。

3
onlyphantom