我有一个(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数据框(数据)。