いつ使うかかなり迷った
factor(教育) または factor(年齢層)R.カテゴリ順データに使用されますか? または、階層のない単純なカテゴリデータを使用できますか?
私はこれがとても基本的であることを知っています。私は本当にいくつかの明確化が必要です。
いつ使うかかなり迷った
factor(教育) または factor(年齢層)R.カテゴリ順データに使用されますか? または、階層のない単純なカテゴリデータを使用できますか?
私はこれがとても基本的であることを知っています。私は本当にいくつかの明確化が必要です。
ここには明確な質問が見当たらないので、おそらく簡単な例で答えとして十分でしょう。
次のデータがあるとします。
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
これを、引数と一緒に引数 を使用したときに何が起こるかを比較してみましょうlevels
。levels
plusを使用すると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.numeric
とtable
.
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()
して、階層カテゴリを作成します。levels
ordered = TRUE
ordered()
または、順序付き因子を直接作成する場合に使用します。カテゴリの順序を指定する必要があります。
ordered(set1, levels = c("CA", "BA", "AA", "CC", "B"))
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