我想估算一些数据,并用真实值检查估算。
iris
数据集(没有NA)现在,我想检查结果,但只检查NA的结果。因此,我想获取原始的iris
数据以提取NA在dataNA中出现的值,并对ImputedData
做同样的操作。因此,我可以检查随机生成的NA之间的rmse
和其他评估指标,然后将其推算为真实结果。
代码:
library(missForest)
data(iris)
data <- iris
# produce 20% missing values
dataNAs <- prodNA(iris, noNA = 0.2)
ImputeDataFunction <- function(InputData){
ImputedData <- missForest(InputData, mtry = floor(sqrt(ncol(InputData))), ntree = 100)
ImputedData <- ImputedData$ximp
return(ImputedData)
}
ImputedData <- ImputeDataFunction(dataNAs)
答案 0 :(得分:1)
我们可以直接以向量化方式使用bsearch()
并将is.na
与which
一起应用以获取arr.ind
的位置
NAs
答案 1 :(得分:1)
您可以像这样访问具有NA的行
NArows <- apply(dataNAs,1,function(x) any(is.na(x)))
iris[NArows ,]
dataNAs[NArows,]
答案 2 :(得分:1)
这将为您提供变量名称,原始值和插补:
NA_id<-is.na.data.frame(dataNAs)
comp <- data.frame(
var = rep(names(data),as.vector(colSums(r))),
origin = data[NA_id],
imput = ImputedData[NA_id] )
> comp
var origin imput
1 Sepal.Length 5.1 5.099827
2 Sepal.Length 4.7 4.506957
3 Sepal.Length 4.6 4.895653
4 Sepal.Length 5.4 5.243833
5 Sepal.Length 4.8 5.271015
...