最快的虚拟变量转换包/功能

时间:2017-10-25 15:50:14

标签: r sparse-matrix xgboost dummy-variable

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

1 个答案:

答案 0 :(得分:1)

Matrix包中,model.matrixsparse.model.matrix都可以完成这项工作,而且我总是很快找到它们。 e.g。

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         .

即使有数百个变量有很多因素,也非常快。