2017年3月29日水曜日

Rで、データフレームの中身を一括で因子型に変換する方法

例えば、Rで↓こんなデータを扱っているとします。

# サンプルデータを作る
Q1 <- c(1, 1, 2, 2)
Q2 <- c(1, 2, 1, 2)
Q3 <- c(1, 2, 3, 1)
df <- data.frame(Q1, Q2 ,Q3)

# 中身の確認
df

  Q1 Q2 Q3
1  1  1  1
2  1  2  2
3  2  1  3
4  2  2  1

読み込んだときの都合か何かで、データはinteger型とかnumeric型になっていると。

でも、実は質問 Q1、Q2、Q3に、1:はい、2:いいえ、3:どちらともいえない、とかで答えたもので、因子型として扱いたい。

多重対応分析のmcaとかを使おうとすると、

mca(df = df) でエラー: all variables must be factors

が出ちゃうとか、そんなシチュエーション。

因子型に変換したいときには、as.factor関数ですが、これはデータフレームに対しては使えない。

こんな時は、あの一家。そう、applyファミリーの登場です。

lapplyを使って、1列ごとにas.factor関数を適用、リストとして返ってきたものを、またデータフレームに戻してやるという流れです。

df.fctr <- data.frame( lapply(df, as.factor) )

# 型の確認
df.fctr$Q1 

[1] 1 1 2 2
Levels: 1 2

無事、因子型になりました。