2017-07-05 6 views
1

私はRでFORループを使用して処理するために1,000のデータフレームを持っています.DF1〜DF1000という名前が付けられています。データフレーム内のすべての0の値を1に置き換える必要があります。私はこれを次のように書きます。forループ内の複数の可変データフレームでゼロを置き換えるにはどうすればよいですか?

for (i in 1:1000){ 
eval(as.symbol(paste0("DF","i")))[eval(as.symbol(paste0("DF","i")))==0]<-1 
} 

エラーが表示されます(「could not find eval < - 」)。この問題を解決するにはどうすればよいですか?私は "割り当て"を使用しようとしましたが、別のエラーが表示されます( "割り当て対象は非言語オブジェクトに展開されます")。事前に

おかげで、 Alvo

+1

ベストプラクティスは、すべてのデータフレームを 'list'に入れて、' lapply(list、function(x)replace(x、x == 0,1)) ' –

+0

@Rich Scrivenに感謝します。しかし、1つの質問。これが1000個のデータフレームに行っている10個または20個のもののほんの最初のものだったとします。これは、Forループの外にある他の19ものの前にこれを行わなければならないということですか? – Alvo

答えて

0

は一つの方法は、ベースreplace機能を使用して、地球環境の新しいDFassignにすべての文字値DFです。

for (i in 1:1000){ 
     assign(paste0("DF", i), 
      replace(eval(parse(text = paste0("DF", i))), eval(parse(text = paste0("DF", i))) == 0, 1), 
      envir = .GlobalEnv) 
    } 

これは、forループ外部replace(DF,DF == 0, 1)と同様です。

+0

ありがとう@HNSKD。私は同じループの中でそれをやり遂げることができるので、この方法が大好きです。これを控えめにした人が、なぜそれを使用してはならないのかを説明できますか? – Alvo

関連する問題