我想知道为什么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,它包含使用tpredict.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

08-05 11:28