在大数据上对R进行单热编码的有效方法

时间:2017-08-18 20:09:56

标签: r sparse-matrix

我正在尝试创建一个单一的数据表示。这是我的方法:

data(iris)
iris = as.data.frame(apply(iris, 2, function(x) as.factor(x)))
head(iris)

iris_ohe <- data.frame(model.matrix(~.-1, iris))
head(iris_ohe)
dim(iris_ohe)

问题是,我正在处理的数据有超过100万行,并且进行编码时,我得到一个包含超过100列的矩阵。这对于R来说太多了,而且我的内存不足了:

Error: cannot allocate vector of size 10204.5 Gb

我可以尝试更好的方法吗?

2 个答案:

答案 0 :(得分:3)

尝试使用mltools::one_hot

require(mltools)
require(data.table)

n <- 1e6

df1 <- data.table( ID= seq(1:n), replicate(99, sample(0:1,n,TRUE)))

one_hot(df1)

对我来说没有内存问题,几乎可以立即运行

答案 1 :(得分:1)

sparse.model.matrix包中的

Matrixmodel.matrix的稀疏等效项,避免了无法分配向量的问题。