NA の 10% を持つ (70 行 x 4 列) データフレーム (データ) があります。私のデータフレームには、行ごとに 1 つしか NA がありません。このデータセットから、60% の NA を持つ 10 個のデータフレームを生成したいと考えています。しかし、完全に空 (= すべて 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 の場合、ループは非常に遅くなりますが、残念ながら NA の 60% を導入する必要があります。また、ループで導入された NA は完全にランダムに導入されるため、元の NA を「置き換える」ことができます。データフレーム (データ)。