根据一个数据帧中的NA外观比较两个数据帧结果

时间:2020-06-10 17:58:04

标签: r

我想估算一些数据,并用真实值检查估算。

  • 我获取了iris数据集(没有NA)
  • 我随机删除一些结果以产生NA
  • 然后我应用插补函数来尝试插补这些NAs

现在,我想检查结果,但只检查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)

3 个答案:

答案 0 :(得分:1)

我们可以直接以向量化方式使用bsearch()并将is.nawhich一起应用以获取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
...
相关问题