2017-10-18 7 views
0

私は、ユーザー定義の正規化によってデータフレームの選択された列を正規化したいと考えています。これまでのところ私は行くつもりですRのモード正規化のためのヒストグラム関数にデータフレームスライスを渡す方法?

library(tidyr) 
library(ggplot2) 

Mode <- function(x, na.rm = TRUE) { 
    x <- lapply(x, as.numeric) 
    distribution <- hist(x, breaks = 50, plot = FALSE) 
    distribution$mids[which.max(distribution$counts)] 
} 

data_normalised <- lapply(mtcars[,-9:-12], function(x) {(x-Mode(x))/(sd(x))}) 

最小の例として。 しかし、ヒストリは、 "xは数値でなければならない"と訴えています。私はこれが鋳造によって解決できると思った。うまく動かない。 私はeighter動作しません

hist(mtcars[[-9:-12]]) 

として、HISTが

hist(mtcars[[3]]) 

のために動作しますが、私はDFのスライスと関数histを結合する方法を見つけることができないことを知っています。

私は、Mode()関数をsd()関数として機能させたいと考えています。 df列を取り、値を返します。

ありがとうございました!

+0

あなたの関数 'Mode'は何も返しません。関数を終了する前に 'return() 'と興味のある値を加えてください。 – R18

答えて

0

Mode()では、class(x)'numeric'です(つまり、長さ32の数値ベクトルがあります)。次に、lapply()を使用して、as.numeric()xに適用します。

Mode <- function(x, na.rm = TRUE) { 
    x <- as.numeric(x) 
    distribution <- hist(x, breaks = 50, plot = FALSE) 
    distribution$mids[which.max(distribution$counts)] 
} 

あなたは、その後のように進行することができます。このステップの後、class(x)はas.numericは、あなたが実際にベクトルの要素をループは、代わりにあなただけのモード機能でx <- as.numeric(x)を使用することができませんベクトル化されているので'list'ですあなたはやった、それがエラーを生成しません。

data_normalised <- lapply(mtcars[,-9:-12], function(x) {(x-Mode(x))/(sd(x))}) 

再度data.frameを取得したい場合は、あなたがcbind()を使用することができます。

data_normalised <- do.call("cbind", data_normalised) 

あなたは:

head(data_normalised) 
      mpg   cyl  disp   hp  drat   wt  qsec   vs 
[1,] 0.9540484 -1.09187321 0.6858229 0.03646289 1.54298263 -0.84827399 -0.35815351 -0.01984063 
[2,] 0.9540484 -1.09187321 0.6858229 0.03646289 1.54298263 -0.58765969 -0.04476919 -0.01984063 
[3,] 1.2527070 -2.21174317 0.2662607 -0.21148473 1.44946853 -1.15487905 0.84501845 1.96422286 
[4,] 1.0204170 -1.09187321 1.4765365 0.03646289 0.00935141 -0.24017396 1.30949879 1.96422286 
[5,] 0.5724290 0.02799675 2.2995240 0.98449790 0.14027115 -0.01022017 -0.04476919 -0.01984063 
[6,] 0.4728762 -1.09187321 1.2102758 -0.03646289 -0.58913882 0.01022017 1.74599838 1.96422286 
+0

優れた作品!ありがとうございました!おそらく私はここにいくつかの基本的な概念を理解していませんでした。私はこのラッピーがすでにデータフレームを返すと思う。 – Neudrino

関連する問題