对于我的一生,我无法弄清楚为什么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)
答案 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
而不是请求的行。