我有一个数据框,其中包含一系列因子变量,需要转换为虚拟变量才能与xgboost
包一起使用。我目前在dummyVars
中使用caret
功能,这是非常好但有点慢。有没有更快的方法来进行此转换?
答案 0 :(得分:1)
从Matrix
包中,model.matrix
和sparse.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 .
即使有数百个变量有很多因素,也非常快。