无缺失值,但在KNN R期间将其转换为NA值

时间:2019-03-13 21:00:03

标签: r na knn

对于我的一生,我无法弄清楚为什么R突然将我的值转换为NA。

timesheets.order_by('-duration')  
timesheets.aggregate(Avg('duration')) # {'duration__avg': datetime.timedelta(0, 26473, 292625)} 

带**的行是给我带来麻烦的行(显然,星号不在我的实际代码中)。我将训练和测试数据按此处未列出的代码进行了划分,但是我可以肯定地说没问题。当我要求打印Walc时,所有值都在那里。当我打印test $ Walc时,所有值都在那里。只有当我添加[testsamples]时,它突然返回几乎所有的NA值。有人知道为什么会这样吗?

编辑:这是我分割数据的方式

library(class)
attach(alcohol)
trainknn=cbind(Pstatus, absences, internet)[testsamples,]
testknn=cbind(Pstatus, absences, internet)[-testsamples,]
**trainknn.Walc=test$Walc[testsamples]**
set.seed(1)
knn.pred=knn(trainknn, testknn, trainknn.Walc, k=6)
knn.predtest=sample(knn.pred,57,replace=T)

1 个答案:

答案 0 :(得分:0)

当您尝试使用不存在的索引对向量进行子集化时,它将为这些值返回NA。您可以通过mtcars数据集看到这一点:

# mtcars$mpg is a vector 32 items long:
length(mtcars$mpg)
[1] 32

当使用指数<32的方括号表示法对子集进行分组时,它将返回适当的值。当您使用超出范围的索引(例如下面的999)时,它将返回NA

mtcars$mpg[c(1,14,21,999)]
[1] 21.0 15.2 21.5   NA

在您的示例中,您使用sample按行号从alcohol中选择64个随机行。然后,您可以使用它将alcohol子集为test,后者只有64行。然后,当您尝试使用test来对testsamples进行子集化时,您正在请求test中不存在的行,因为它较短。在这种情况下,您得到NA而不是请求的行。