【问题标题】:comparing two dataframes results based on NA appearances in one dataframe根据一个数据帧中的 NA 外观比较两个数据帧结果
【发布时间】:2020-06-10 17:58:04
【问题描述】:

我有一些数据要估算,并检查估算的真实值。

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

现在我想检查结果,但只检查 NA 的结果。所以我想用原始的iris 数据提取数据NA 中出现NA 的值,并对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)

【问题讨论】:

  • 您是否正在寻找 Iris 的子集,其中仅包含 dataNAs 上存在 NA 的行?

标签: r


【解决方案1】:

您可以像这样访问带有 NA 的行

NArows <- apply(dataNAs,1,function(x) any(is.na(x)))

iris[NArows ,]
dataNAs[NArows,]

【讨论】:

    【解决方案2】:

    我们可以直接以矢量化的方式使用is.na,并将whicharr.ind一起应用以获取NAs的位置

    i1 <- which(is.na(dataNAs), arr.ind = TRUE)
    

    【讨论】:

      【解决方案3】:

      这会给你变量名、原始值和插补:

      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
      ...
      

      【讨论】:

        猜你喜欢
        • 2021-01-24
        • 1970-01-01
        • 1970-01-01
        • 2019-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-23
        • 2018-01-15
        相关资源
        最近更新 更多