9

データフレームにあるデータを正規化しようとしています。それぞれの値を取得し、その値が存在する列の平均と標準偏差とともにpnorm関数を実行します。ループを使用して、実行したいことを書き出す方法は次のとおりです。

#example data
hist_data <- data.frame( matrix( rnorm( 200,mean=5,sd=.5 ),nrow=20 ) )

n <- dim( hist_data )[2] #columns=10
k <- dim( hist_data )[1] #rows   =20

#set up the data frame which we will populate with a loop
normalized <- data.frame( matrix( nrow = nrow( hist_data ), ncol = ncol( hist_data ) ) )

#hot loop in loop action
for ( i in 1:n ){
   for ( j in 1:k ){
      normalized[j,i] <- pnorm( hist_data[j,i], 
                                mean = mean( hist_data[,i] ), 
                                sd = sd( hist_data[,i] ) )
   }  
}
normalized

Rには、これを行うための便利なダンディベクトルの方法があるはずです。私は頭がいいと思ったので、適用機能を使ってみました。

#trouble ahead
hist_data <- data.frame( matrix( rnorm( 200, mean = 5,sd = .5 ), nrow=10 ) )
normalized <- apply( hist_data, 2, pnorm, mean = mean( hist_data ), sd = sd( hist_data ) )
normalized

私の残念なことに、それは私が期待したものを生み出しません。出力の左上と右下の要素は正しいですが、それだけです。では、どうすれば私の人生をループ解除できますか?

私の2番目のコードブロックが実際に何をしているのか教えていただければボーナスポイント。まだ私には謎のようなものです。:)

4

1 に答える 1

6

あなたがしたい:

normalize <- apply(hist_data, 2, function(x) pnorm(x, mean=mean(x), sd=sd(x)))

問題は、個々の列を に渡しているpnormが、全体hist_dataを平均と標準偏差の両方に渡していることです。

ツイッターで言ったように、私は統計の専門家ではないので、あなたが実際に何をしようとしているのかについては何も答えられません :)

于 2009-08-07T19:11:45.937 に答える