59  手動で作成してみる

ここまでは、as.factorで因子型を作成したり、作成されたレベルを変更する方法について解説してきましたが、ここでは、factor関数を利用して対応表を含めて最初から作成する方法について解説しておきます。

alcohol = c("週1日以内","週4-6日","週4-6日","毎日","のまない","週1-3日","毎日")

?factor
starting httpd help server ... done

ここで最低限必要となるのはアーギュメントに初期値が設定されていないlevelsです。

対応表を作成するためにはlevelsとlabelsの二つが、必要となります。複数形でsがついているの注意しておいてください。

例えば、1で男性、2で女性を表すようなデータがあったとして、因子型を作成したい場合は

factor(
  c("1","2","1","1"), 
  levels=c("1" ,"2"),
  labels=c("男","女")
)
[1] 男 女 男 男
Levels: 男 女

としてあげることで作成できます。levelsに与えてあげるベクトルに記載されているそのままの、レベルにしたい値を与えて、labelsに与えてあげたレベルの順番で、文字として表示したいベクトルを与えてあげる形になります。

ここで、levelsやlabelsの挙動も確認しておきましょう

例えば、今度はペットの種類を聞いているようなデータだとすると、

factor(
  c("1","2","1","1","2"), 
  levels=c("1" ,"2","3"),
  labels=c("犬","猫","ペットはいない")
)
[1] 犬 猫 犬 犬 猫
Levels: 犬 猫 ペットはいない

このようにlevelsを増やしても問題はありません。単純にレベルとしてはあっても、答えた人がいなかったようなケースではこういうことは起こりえます

factor(
  c("1","2","1","1","2"), 
  levels=c("1" ,"2"),
  labels=c("犬","猫","ペットはいない")
)
Error in factor(c("1", "2", "1", "1", "2"), levels = c("1", "2"), labels = c("犬", : invalid 'labels'; length 3 should be 1 or 2

ただし、ラベルのベクトルの長さとレベルのベクトルの長さは一致していないとエラーになりますので注意してください。(対応表という意味ではあたりまえといえばあたりまえの動作ですね!)

レベルが増えても、同じように対応できます。

factor(
  c("1","2","1","1","2","4","4","5","3"), 
  levels=c("1" ,"2","3","4","5"),
  labels=c("犬","猫","ハムスター","金魚","カブトムシ")
)
[1] 犬         猫         犬         犬         猫         金魚       金魚      
[8] カブトムシ ハムスター
Levels: 犬 猫 ハムスター 金魚 カブトムシ

いかがでしょうか?

因子型、作成できそうですか?

次の動画でここまでで学んだ知識をつかって因子型を作成する課題をご提示して回答いたしますので、とりくんでみてください。