最快的虚拟变量转换包/函数

Fastest dummy variable conversion package / function

我有一个包含一堆因子变量的数据框,这些因子变量需要转换为虚拟变量才能与 xgboost 包一起使用。我目前在 caret 中使用 dummyVars 函数,它非常好但有点慢。有没有更快的方法来进行这种转换?

Matrix 包中,model.matrixsparse.model.matrix 都可以完成这项工作,而且我总是发现它们非常快。例如

require(Matrix)
oat_data <- data.frame(  num = c(1,2,4,8,16), 
                      animal = c("cat","cat","dog","cat","horse"), 
                        oats = c("likes","dislikes","dislikes","likes","dislikes"))

dense_mat <- model.matrix(~.-1,data=oat_data, verbose = F)
sparse_mat <- sparse.model.matrix(~.-1,data=oat_data, verbose = F)

dense_mat
  num animalcat animaldog animalhorse oatslikes
1   1         1         0           0         1
2   2         1         0           0         0
3   4         0         1           0         0
4   8         1         0           0         1
5  16         0         0           1         0

sparse_mat
  num animalcat animaldog animalhorse oatslikes
1   1         1         .           .         1
2   2         1         .           .         .
3   4         .         1           .         .
4   8         1         .           .         1
5  16         .         .           1         .

即使有数百个具有许多因子的变量也非常快。