Если вы открыты для использования пакета data.table , mltools имеет метод one_hot ().
library(data.table)
library(mltools)
binom <- data.table(y=runif(1e5), x=runif(1e5), catVar=as.factor(sample(0:4,1e5,TRUE)))
one_hot(binom)
y x catVar_0 catVar_1 catVar_2 catVar_3 catVar_4
1: 0.90511891 0.83045050 0 0 1 0 0
2: 0.91375984 0.73273830 0 0 0 1 0
3: 0.01926608 0.10301409 0 0 1 0 0
4: 0.48691138 0.24428157 0 1 0 0 0
5: 0.60660396 0.09132816 0 0 1 0 0
---
99996: 0.12908356 0.26157731 0 1 0 0 0
99997: 0.96397273 0.98959000 0 1 0 0 0
99998: 0.16818414 0.37460941 1 0 0 0 0
99999: 0.72610508 0.72055867 1 0 0 0 0
100000: 0.89710998 0.24155507 0 0 0 0 1