我想知道为什么R的插入符号包中的preProcess函数用于归入数据集的缺失值比原始数据集返回的观察值少?
例如:
library(caret)
t <- data.frame(seq_len(100000),seq_len(100000))
for (i in 1:100000)
{
if (i %% 10 == 0) t[i,1] <- NA;
if (i %% 100 == 0) t[i,2] <- NA
}
preProcValues <- preProcess(t, method = c("knnImpute"))
preProcValues仅包含90000个2个变量的观测值,而预期为100000个。
最佳答案
从文档中:
函数preProcess
估计每个参数所需的参数
操作和predict.preProcess
用于将它们应用于特定
数据集。
此处,preProcValues
并非插补后的t
,它包含使用t
对predict.preProcess
进行插补所需的参数。
您不应该期望preProcValues
有10万个观测值
提示:看看source code,看看NA
值到底是怎么回事
使用您的示例(已修改为使用method = "medianImpute"
-请参见此question(以及上述源代码),以了解为什么您尝试执行的操作无法与“knnImpute”一起使用)
preProcValues <- preProcess(t, method = "medianImpute")
> preProcValues$dim[1]
#[1] 90000
在这里,我们用中位数(50K)替换
NA
中的t
值t2 <- predict(preProcValues, t)
> dim(t2)[1]
#[1] 100000