我正在研究常规data.frame
,它看起来对于glm
函数很重要,所以我决定我会对模型矩阵的稀疏重复进行处理,这样我就可以了将此稀疏矩阵放入glmnet
函数中。但sparse.model.matrix
似乎从原始矩阵中删除了一些行。知道为什么会这样,以及任何解决方案如何避免这种情况?
代码如下:
> mm <- sparse.model.matrix(~clicks01+kl_tomek*bc1+hours+plec+1,
data = daneOst)
> dim(mm)
[1] 1253223 292
> dim(daneOst)
[1] 1258836 6
答案 0 :(得分:13)
我将na.action
更改为na.pass
取得了一些成功,这包括我矩阵中的所有行:
options(na.action='na.pass')
请注意,这是一个全局选项,因此您可能希望将其重新设置为原始值,以免弄乱其余代码。
previous_na_action <- options('na.action')
options(na.action='na.pass')
# Do your stuff...
options(na.action=previous_na_action$na.action)
来自this的解答。
答案 1 :(得分:8)
这是由于NA的原因!
运行sum(complete.cases(mm))
。我打赌它也给你1253223。
因此,请将数据框中的NA替换为值(例如,&#39; IMPUTED_NA&#39;或-99999),然后重试。
答案 2 :(得分:2)
@WillemM
是正确的。 NAs
的存在将脱离稀疏矩阵。对于大数据集,最好的方法是使用stringsAsFactors=FALSE
将文件读入数据框,然后选择所需的任何插补方法。如果您选择使用基于树的学习方法,则更容易将这些NAs
与数据集中不存在的内容相混淆。大数据集上的多次插补将花费很长时间,您也可能失去R会话。