因子のラベルとレベルの用語がなぜこんなに奇妙なのでしょうか? 質問する

因子のラベルとレベルの用語がなぜこんなに奇妙なのでしょうか? 質問する

設定不可能な関数の例は ですlabels。 関数を使用して作成された場合にのみ、因子ラベルを設定できます。 関数factor()はありませんlabels<-。因子の「ラベル」と「レベル」に意味があるわけではありません...

>  fac <- factor(1:3, labels=c("one", "two", "three"))
> fac
[1] one   two   three
Levels: one two three
> labels(fac)
[1] "1" "2" "3"

わかりました。ラベルを要求しました。これは、factor 呼び出しによって設定されたものと想定されますが、取得される結果は、まったく... 何と言うか、直感に反するものでしょうか。

> levels(fac)
[1] "one"   "two"   "three"

つまり、ラベルを設定するということは、実際にはレベルを設定するということのようです。

>  fac <- factor(1:3, levels=c("one", "two", "three"))
> levels(fac)
[1] "one"   "two"   "three"

それは予想通りです。では、レベルを設定するときのラベルとは何でしょうか?

>  fac <- factor(1:3, levels=c("one", "two", "three"), labels=c("x","y", "z") )
> labels(fac)
[1] "1" "2" "3"
> levels(fac)
[1] "x" "y" "z"

レベルの指定では、 の「ラベル」引数が「レベル」引数よりも優先されるようです。なぜそうなるのでしょうか。また、で取得されると想像していたものが で返されるのfactor()はなぜでしょうか。labels()as.character(as.numeric(fac))

(これは、私が質問に移るように求められた、割り当て関数に関する以前の回答での、関連のないコメントでした。ですから、ここで私に教えていただく機会があります。)

ベストアンサー1

labelsとの違いについて考える方法はlevelslabels()トミーが回答で説明している関数を無視して)、はlevelsRに入力()でどの値を探すかx、結果のオブジェクトのレベルでどの順序を使用するかを伝えることを目的としておりfactorlabels価値観入力後のレベルは係数としてコード化されています... Tommy の回答で示唆されているように、factorによって返されるオブジェクトにはfactor()呼び出される部分はありませんlabels... 引数によって調整されたレベルだけですlabels... (よくわかりません)。

例えば:

> f <- factor(x=c("a","b","c"),levels=c("c","d","e"))
> f
[1] <NA> <NA> c  
Levels: c d e
> str(f)
Factor w/ 3 levels "c","d","e": NA NA 1

の最初の 2 つの要素xは には見つからなかったのでlevels、 の最初の 2 つの要素fは ですNA"d""e"は に含まれるので、には現れなくてもlevelsのレベルで現れます。fx

現在、以下が含まれますlabels:

> f <- factor(c("a","b","c"),levels=c("c","d","e"),labels=c("C","D","E"))
> f
[1] <NA> <NA> C   
Levels: C D E

R は、因子に何が含まれるべきかを判断した後、レベルを再コード化します。もちろん、これを使用して、次のような頭を悩ませるような作業を行うこともできます。

> f <- factor(c("a","b","c"),levels=c("c","d","e"),labels=c("a","b","c"))
> f
[1] <NA> <NA> a   
Levels: a b c

別の考え方としてはlevels、それはfactor(x,levels=L1,labels=L2)

f <- factor(x,levels=L1)
levels(f) <- L2

この例を適切に言い換えたバージョンは、パット・バーンズのR インフェルノ-- セクション 8.2 には因数パズルがたくさんありますが、この特定のパズルはありません...

おすすめ記事