2013-10-19 3 views
6

私のデータフレームのすべての列が同じスケールになるようにしようとしています..データフレーム内のすべての列を0〜100のスケールに再スケールするにはどうすればよいですか? (r)

今私は何かを持っています...ここでaは0-1のスケールですb 100スケールであり、cは、私はそれがやや明確であると思いますどのように私はこのような100scaleにそれを得るだろう...

a  b  c 
0  89  80 
100 93  60 
0  88  100 

1-5規模で

a b  c 
0 89 4 
1 93 3 
0 88 5 

..です 私はスケール()を試したが、それを動作させるように見えることはできません。 scaleを使用して

+0

関連:http://stackoverflow.com/questions/15468866/scaling-a-numeric-matrix-in-r-with-values -0-to-1 –

+0

あなたの 'b'カラムは例ではスケーリングされていないようですが、私はそれもあるはずです。 – beroe

+0

私のb列はすでに100ptのスケールになっていますが、変更したくありません。 –

答えて

14

datは、あなたのデータフレームの名前であれば、このような単純なケースでは

## for one column 
dat$a <- scale(dat$a, center = FALSE, scale = max(dat$a, na.rm = TRUE)/100) 
## for every column of your data frame 
dat <- data.frame(lapply(dat, function(x) scale(x, center = FALSE, scale = max(x, na.rm = TRUE)/100))) 

、あなたはまた、独自の関数を書くことができます。

fn <- function(x) x * 100/max(x, na.rm = TRUE) 
fn(c(0,1,0)) 
# [1] 0 100 0 
## to one column 
dat$a <- fn(dat$a) 
## to all columns of your data frame 
dat <- data.frame(lapply(dat, fn)) 
+0

これはうまくいくようですが、0-1スケールのすべての列に対してNAを返しています –

+0

'max.n.rm = TRUE'をおそらく追加すると役に立ちます。私はあなたのデータを見ないと確かに言うことはできませんが。 –

+0

そのトリックをした!ありがとう! –

0

私の経験では、いずれかの列が-2を持っていた場合、現在の答えは0〜100のスケールを生成しないだろうか、これはまだ未回答であるということです。私は答えを感謝しながら、私はそれを試みたとき、私は-100から100の変数があり、これはまだいくつかの否定的なままにした?

私はこれがあなたに適用された場合に解決策を持っている:

rescale <- function(x) (x-min(x))/(max(x) - min(x)) * 100 
dat <- rescale(dat) 
関連する問題