1

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 を「置き換える」ことができます。データフレーム (データ)。

4

1 に答える 1