-2

我的数据包含有关智能手机的数据。要做一个random forest,我需要将我的因子 Brand 转换成很多假人。

 I tried this code

 m <- model.matrix( ~ Brand, data = data_price)

 Intercept  BrandApple  BrandAcer  BrandAlcatel ...
 1          0           0          1
 1          1           0          0
 ...

问题是原始数据有 2039 行,而输出只有 2038 行。现在我想将虚拟对象添加到 mydata_price中,但这不起作用。

我怎样才能制作一个假人并将其添加到我的数据集中?

4

1 回答 1

1

您使用的方法model.matrix应该可以正常工作,我们只需要弄清楚丢失的行发生了什么。我想问题是您的因素中缺少值。考虑以下:

dat <- factor(mtcars$cyl)
dat2 <- dat
dat2[1] <- NA

在这里,我采用了一个因子,即mtcars数据集中的圆柱数,为了进行比较,我创建了第二个因子,其中一个值替换为NA. model.matrix让我们看看在每种情况下会吐出的行数:

nrow(model.matrix(~dat))
[1] 32
nrow(model.matrix(~dat2))
[1] 31

您会看到,在因子变量有缺失值的情况下, 的输出model.matrix少了一行,这可能不足为奇。

您可以为缺失值创建自己的因子水平,或者您可以安全地从原始数据集中删除具有缺失值的行,如果这对于您的应用程序来说似乎合适的话。的输出包含行名称,如果您想沿着这条路线走model.matrix,您可以使用它来将数据返回到原始数据帧。merge

于 2016-03-07T09:42:47.397 回答