我已将数据集拆分为测试和训练数据集。我试图在训练集上进行回归,然后在测试集上使用预测。当我这样做时,我收到一条错误消息:" model.frame factor x中的错误有新的级别"。我知道这是因为我的测试数据中有一些级别没有出现在我的训练数据中。
我想要做的只是消除或忽略两个数据集中的水平。我尝试过这样做,但它没有将任何级别设置为NA
,id
对象显示&#34;整数(空)&#34;:< / p>
id <- which(!(test$x %in% levels (train$x))
train$x[id] <- NA
fit <- lm(y ~ x, data=train)
P <- predict(fit,test)
答案 0 :(得分:0)
您的代码会出现“替换长度不同”错误。
id <- which(!(test$x %in% levels (train$x))
告诉您test$x
中levels(train$x)
中的哪些元素不在id
中,因此您在进行替换时应使用test$x
来索引train$x
,而不是test$x[id] <- NA
test$x <- droplevels(test$x) ## also don't forget to remove unused factor levels
fit <- lm(y ~ x, data = train)
P <- predict(fit, test)
。
train
P
中的所有数据都将用于构建线性回归模型。 NA
中的某些预测将为id
。
我仍然无法让
integer(0)
对象正确识别两个数据集中没有哪个级别。在工作空间中,它只显示test$x
。
然后,你的问题有什么意义?!! levels(train$x)
中的所有级别都在{{1}}内,并且没有新级别。