1

我有一个(70 行 x 4 列)数据框(数据),它有 10% 的 NA。我的数据框每行不超过一个 NA。从这个数据集中,我想生成 10 个具有 60% NA 的数据帧。但我不希望有完全空的 (=all-NA) 行。所以我做了一个嵌套到for循环中的while循环。该代码正在运行,但需要很长时间才能运行。因为我需要为许多数据集运行这个循环,所以我想知道是否有一种简单的方法来改进它。

我的数据框如下所示:

library(missForest)
data<-iris[1:70,1:4]
for(i in 1:28){
  data[i,]<-prodNA(data[i,],noNA =0.25)
}

这是我的循环:

    missing.data<-list()

  for(j in 1:10){
    missing.data[[j]]<-prodNA(data, noNA = 0.6)
      while(sum(rowSums(is.na(missing.data[[j]]))==4)!=0) {
        missing.data[[j]]<-prodNA(data, noNA = 0.6)
    }
}

编辑:对于 noNA > 0.55,循环变得非常慢,但不幸的是我需要引入 60% 的 NA。此外,循环中引入的 NA 是完全随机引入的,因此它们可以“替换”原始中的 NA数据框(数据)。

4

1 回答 1

1

我不确定这是否是您要查找的内容:

library(missForest)
data1<-iris[1:70,1:4]
for(i in 1:28){
     data1[i,]<-prodNA(mydata[i,],noNA =0.10)
 }
table(is.na(data1))
n<-10
data2<-do.call("rbind", replicate(n, data1, simplify=FALSE))
table(is.na(data2))

data3<-prodNA(data2,noNA=0.55)
> table(is.na(data3))

FALSE  TRUE 
 1133  1667 
于 2013-08-15T19:54:31.387 回答