sparse.model.matrix在R中丢失行

时间:2015-04-19 16:42:04

标签: r matrix sparse-matrix

我正在研究常规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

3 个答案:

答案 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会话。