1

次のようなテスト データセットがあります。

table(spamday)  
FR MO SA SU TH TU WE  
30 96  9  9 45 60 51

構造を持つ:

str(spamday)  
'data.frame':   300 obs. of  1 variable:
$ SPAMreceived: Factor w/ 7 levels "FR","MO","SA",..: 2 5 5 5 6 2 6 2 2 6 ...  

そして私の目標は、関数を使用して、カテゴリ変数をディレクティブtransformで課された順序で順序付き因子にすることですlevels

したがって、次のコードを実行します。

spamday <- transform(spamday, SPAMreceived <- factor(SPAMreceived, levels = c("MO", "TU", "WE", "TH", "FR", "SA", "SU"), ordered = TRUE))

何だと思いますか?何も起こりません...使用しても同じですtable

table(spamday)  
FR MO SA SU TH TU WE  
30 96  9  9 45 60 51

私は混乱しています...私は何を間違っていますか?

4

1 に答える 1

3

<-いつ使用し、いつ使用しないかを追跡するのは少し難しい場合がありますが、これは使用したくない場合です。つまり、コードを次のように変更するだけでうまくいくはずです。

spamday <- transform(spamday, SPAMreceived = factor(SPAMreceived, 
    levels = c("MO", "TU", "WE", "TH", "FR", "SA", "SU"), ordered = TRUE)) 

以下に小さな例を示します。

set.seed(1)
spamday <- data.frame(SPAMreceived = sample(c("FR", "MO", "SA", "SU", "TH", "TU", "WE"),
                                            50, replace = TRUE))
table(spamday$SPAMreceived)
# 
# FR MO SA SU TH TU WE 
#  5  7  7  6  9 10  6

temp <- transform(spamday, SPAMreceived = factor(SPAMreceived, 
    levels = c("MO", "TU", "WE", "TH", "FR", "SA", "SU"), ordered = TRUE))
table(temp$SPAMreceived)
# 
# MO TU WE TH FR SA SU 
#  7 10  6  9  5  7  6 

または、必ずしも順序付き因子列を作成する必要さえありません。最終段階でテーブルをソートするだけです:)

table(spamday$SPAMreceived)[c("MO", "TU", "WE", "TH", "FR", "SA", "SU")]
# 
# MO TU WE TH FR SA SU 
#  7 10  6  9  5  7  6
于 2013-10-05T14:54:35.180 に答える