我正在尝试创建一个单一的数据表示。这是我的方法:
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
我可以尝试更好的方法吗?
答案 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
包中的 Matrix
是model.matrix
的稀疏等效项,避免了无法分配向量的问题。