1

いつ使うかかなり迷った

factor(教育) または factor(年齢層)
R.カテゴリ順データに使用されますか? または、階層のない単純なカテゴリデータを使用できますか?

私はこれがとても基本的であることを知っています。私は本当にいくつかの明確化が必要です。

4

2 に答える 2

6

ここには明確な質問が見当たらないので、おそらく簡単な例で答えとして十分でしょう。

次のデータがあるとします。

set1 <- c("AA", "B", "BA", "CC", "CA", "AA", "BA", "CC", "CC")

このデータを因数分解したいと思います。

f.set1 <- factor(set1)

出力を見てみましょう。R はレベルをアルファベット順に並べただけですが、これが階層を意味するとは言っていないことに注意してください (「レベル」の行を参照してください)。

f.set1
# [1] AA B  BA CC CA AA BA CC CC
# Levels: AA B BA CA CC
is.ordered(f.set1)
# [1] FALSE

ただし、as.numeric因数分解されたデータを使用すると、それが階層的であると誤解される可能性があります。以下の出力では、「5」が「4」の前に来ることに注意してください。また、アルファベット順の出力にも注意してくださいtable(f.set1)(単にtable(set1).

as.numeric(f.set1)
# [1] 1 2 3 5 4 1 3 5 5
table(f.set1)
# f.set1
# AA  B BA CA CC 
#  2  1  2  1  3 

orderedこれを、引数と一緒に引数 を使用したときに何が起こるかを比較してみましょうlevelslevelsplusを使用するとordered = TRUE、このカテゴリ データが で指定された順序で階層化されていることがわかりますlevels(アルファベット順やデータを入力した順序ではありません)。

o.set1 <- factor(set1, 
                 levels = c("CA", "BA", "AA", "CC", "B"), 
                 ordered = TRUE)

出力を表示しても、階層が表示されます。

o.set1
# [1] AA B  BA CC CA AA BA CC CC
# Levels: CA < BA < AA < CC < B
is.ordered(o.set1)
# [1] TRUE

関数as.numerictable.

as.numeric(o.set1)
# [1] 3 5 2 4 1 3 2 4 4
table(o.set1)
# o.set1
# CA BA AA CC  B 
#  1  2  2  3  1

したがって、要約するとfactor()、それ自体で、本質的にカテゴリ データの非階層的な並べ替えられた要素を作成するだけです。および引数を使用factor()して、階層カテゴリを作成します。levelsordered = TRUE

ordered()または、順序付き因子を直接作成する場合に使用します。カテゴリの順序を指定する必要があります。

ordered(set1, levels = c("CA", "BA", "AA", "CC", "B"))
于 2012-10-19T16:39:34.357 に答える
2

ordered(x)または を使用して因子を作成することにより、順序付けされた因子にフラグを立てることができますfactor(x, ordered=TRUE)。の「詳細」セクションでは、次のように?factor説明されています。

順序付けられた因子は、そのクラスのみが因子と異なりますが、メソッドとモデル適合関数は 2 つのクラスをまったく異なる方法で扱います。

これら 2 つのオブジェクトの属性を比較することで、その引用の最初の部分(クラスのみが異なること)を確認できます。

f  <- factor(letters[3:1], levels=letters[3:1])
of <- ordered(letters[3:1], levels=letters[3:1])
attributes(f)
# $levels
# [1] "c" "b" "a"
# 
# $class
# [1] "factor"
attributes(of)
# $levels
# [1] "c" "b" "a"
# 
# $class
# [1] "ordered" "factor" 

次に、さまざまな因子処理 R 関数 (その引用の2 番目の部分の「メソッドとモデル フィッティング関数」 ) を使用して、そのクラス インジケーターis.ordered()の存在をテストします。"ordered"順不同のもの。以下にいくつかの例を示します。

## The print method for factors. (Type 'print.factor' to see the function's code)
print(f)
# [1] c b a
# Levels: c b a
print(of)
# [1] c b a
# Levels: c < b < a

## The contrasts function. (Type 'contrasts' to see the function's code.)
contrasts(of)
#                 .L         .Q
# [1,] -7.071068e-01  0.4082483
# [2,]  4.350720e-18 -0.8164966
# [3,]  7.071068e-01  0.4082483
contrasts(f)
#   b a
# c 0 0
# b 1 0
# a 0 1
于 2012-10-19T16:42:44.353 に答える