No.23028 R 因子の水準の変更方法について  【明石】 2021/02/06(Sat) 16:41

青木先生 様;

お忙しいところを失礼いたします,明石と申します。

毎々,ご丁寧なご教示をいただき,誠にありがとうございます。

大変に初歩的な質問で申し訳ありませんが,因子の水準の変更方法について教えてください。
色々と調べながらやっていますが,私の期待する結果が得られませんでした。
  
---------------------------------------------
因子型変数 f があります。
> f
[1] 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者
[10] 推奨者 中立者 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者
[19] 推奨者 推奨者 推奨者 推奨者 推奨者 中立者 推奨者 推奨者 推奨者
[28] 推奨者 中立者 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者
[37] 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者 中立者 推奨者
[46] 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者
[55] 推奨者 推奨者 推奨者 推奨者 推奨者 中立者 中立者 推奨者 推奨者
[64] 推奨者 推奨者 推奨者 批判者 推奨者 中立者 推奨者 推奨者 中立者
[73] 推奨者 推奨者 推奨者 推奨者 推奨者 中立者 中立者 推奨者 推奨者
[82] 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者 推奨者
[91] 推奨者 推奨者 推奨者 推奨者 批判者 推奨者 推奨者 批判者 推奨者
[100] 推奨者
Levels: 推奨者 中立者 批判者
水準は,コード順となっています。
1 ⇒ 推奨者
2 ⇒ 中立者
3 ⇒ 批判者

内訳(人数)は,以下のとおりです。
> f
推奨者 中立者 批判者
87 10 3
   
--------------------------------
   
現在,コード順の対応となっています。
1 ⇒ 推奨者
2 ⇒ 中立者
3 ⇒ 批判者
   
私がやりたいことは,以下の対応付けです。
数字が大きくなる方向が,良い,という順序です。
1 ⇒ 批判者
2 ⇒ 中立者
3 ⇒ 推奨者

調べて見つけた以下の方法では,私の所望する結果にはなりませんでした。
levels(f) <- c("批判者", "中立者", "推奨者")

> f
[1] 批判者 批判者 批判者 批判者 批判者 批判者 批判者 批判者 批判者
[10] 批判者 中立者 批判者 批判者 批判者 批判者 批判者 批判者 批判者
[19] 批判者 批判者 批判者 批判者 批判者 中立者 批判者 批判者 批判者
[28] 批判者 中立者 批判者 批判者 批判者 批判者 批判者 批判者 批判者
[37] 批判者 批判者 批判者 批判者 批判者 批判者 批判者 中立者 批判者
[46] 批判者 批判者 批判者 批判者 批判者 批判者 批判者 批判者 批判者
[55] 批判者 批判者 批判者 批判者 批判者 中立者 中立者 批判者 批判者
[64] 批判者 批判者 批判者 推奨者 批判者 中立者 批判者 批判者 中立者
[73] 批判者 批判者 批判者 批判者 批判者 中立者 中立者 批判者 批判者
[82] 批判者 批判者 批判者 批判者 批判者 批判者 批判者 批判者 批判者
[91] 批判者 批判者 批判者 批判者 推奨者 批判者 批判者 推奨者 批判者
[100] 批判者
Levels: 批判者 中立者 推奨者
水準は変更されましたが,
困ったことに,fの内訳をみると,内訳が変わってしまっています。
> table(f)
f
批判者 中立者 推奨者
87 10 3
批判者の人数と,推奨者の人数が入れ替わっています。

対応付けを変更したとしても,人数の内訳は変更前と同じでなくては困ります。
つまり,以下です。
> f
推奨者 中立者 批判者
87 10 3
初歩的なことで恐縮ですが,苦慮しております。
ご教示をいただけましたら,大変に助かります。
お手数をおかけいたします。
//

No.23029 Re: R 因子の水準の変更方法について  【aoki】 2021/02/06(Sat) 17:40

factor 関数で自分の望む順に levels で指定して factor 化すればよいのではないですか?
それが基本だと思いますが。
> f = c("推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者",
+ "推奨者", "中立者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者",
+ "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "中立者", "推奨者", "推奨者", "推奨者",
+ "推奨者", "中立者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者",
+ "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "中立者", "推奨者",
+ "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者",
+ "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "中立者", "中立者", "推奨者", "推奨者",
+ "推奨者", "推奨者", "推奨者", "批判者", "推奨者", "中立者", "推奨者", "推奨者", "中立者",
+ "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "中立者", "中立者", "推奨者", "推奨者",
+ "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者", "推奨者",
+ "推奨者", "推奨者", "推奨者", "推奨者", "批判者", "推奨者", "推奨者", "批判者", "推奨者",
+ "推奨者")
>
> table(f)
f
推奨者 中立者 批判者
87 10 3
>
> g = factor(f, levels=c("批判者", "中立者", "推奨者"))
> levels(g)
[1] "批判者" "中立者" "推奨者"
> table(g)
g
批判者 中立者 推奨者
3 10 87
いつでもどこでも何度でも,factor で指定した level 順に変更できますけど...
> x = c("aa", "bb", "cc", "dd")
> y = factor(x, level=c("bb", "dd", "aa", "cc"))
> levels(y)
[1] "bb" "dd" "aa" "cc"
> z = factor(y, level=c("dd", "cc", "bb", "aa"))
> levels(z)
[1] "dd" "cc" "bb" "aa"

No.23030 Re: R 因子の水準の変更方法について  【明石】 2021/02/06(Sat) 18:11

青木先生 様;

お忙しいところを失礼いたします,明石と申します。

ご教示をいただき,誠にありがとうございました。

青木先生からご教示いただいた方法も試しましたが,
その時には,table(f)で人数の内訳を確認したら変わってしまっていたので,
これではダメだと思い込んで,諦めてしまいました。

今思えば,私のミスだったことが分かりました。

大変なご迷惑をおかけしてしまいました。
深くお詫び申し上げます。
//

● 「統計学関連なんでもあり」の過去ログ--- 048 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る