xgboostなど、formulaが使用できないときにmatrixの作成が必要。
(formula はここがわかりやすかった
http://ill-identified.hatenablog.com/entry/2017/04/30/004258)
caretパッケージのdummyVars()を使用したダミー変数化について書きます。
#適当なデータフレームを作成しておく
.r
> # データフレームの生成
> df <- data.frame(x=c('a', 'b', 'c'),
+ y=c(1, 2, 3),
+ z=c('aa','bb','cc')
+ )
#作成したデータは以下のような構成
> df
x y z
1 a 1 aa
2 b 2 bb
3 c 3 cc
> str(df)
'data.frame': 3 obs. of 3 variables:
$ x: Factor w/ 3 levels "a","b","c": 1 2 3
$ y: num 1 2 3
$ z: Factor w/ 3 levels "aa","bb","cc": 1 2 3
#caret::dummyVars()を使用したダミー変数化
> library(caret)
> #dummy変数化
> df_dummy <- dummyVars(~.,data=df)
> df_dummy2<- as.data.frame(predict(df_dummy, df))
> df_dummy2
x.a x.b x.c y z.aa z.bb z.cc
1 1 0 0 1 1 0 0
2 0 1 0 2 0 1 0
3 0 0 1 3 0 0 1
factor型であるx列とz列は展開され、ダミー変数化されている。
numeric型であるy列は展開されずそのまま残っている。