7

データフレームのすべての列を同じスケールにしようとしています..

今、私はこのようなものを持っています...ここで、a は 0-1 スケール、b は 100 スケール、c は 1-5 スケールです。

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

どうすればこのように100スケールにできますか...

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

それがある程度明確であることを願っています.. scale() を試しましたが、うまく動作しないようです。

4

3 に答える 3

18

を使用すると、 がデータ フレームの名前であるscale場合: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))
于 2013-10-19T04:35:16.577 に答える
5

私の経験では、これはまだ答えられていません。列の 1 つに -2 があった場合、現在の答えは 0 ~ 100 のスケールを生成しません。私は答えに感謝していますが、それを試みたとき、-100 から 100 の変数があり、これはまだいくつかの負の値を残しましたか?

これがあなたに当てはまる場合の解決策があります:

rescale <- function(x) (x-min(x))/(max(x) - min(x)) * 100
dat <- rescale(dat)
于 2017-11-10T19:35:58.293 に答える
0

rescale()scales パッケージの関数は、他のスケールに対してさらにシンプルで柔軟です。何らかの理由で 3 から 50 にスケーリングしたい場合は、toパラメーターをここc(3,50)ではなく に設定できc(0,100)ます。さらに、fromデータを別のデータセットのスケールに合わせる必要がある場合は、パラメーターを設定できます (つまり、データの最小/最大は、設定するスケールの最小/最大と等しくない必要があります)。ここでは、0 が -100 から 100 の中間点になる例を示しました。したがって、0:100 に再スケーリングすると、0 が 50 (中間点) に配置されます。

# 0 to 100 scaling
rescale(1:10, to = c(0,100))
# [1]   0.00000  11.11111  22.22222  33.33333  44.44444  55.55556  66.66667  77.77778  88.88889
# [10] 100.00000

# use 'from' to indicate the extended range of values
rescale(seq(0,100,10), to = c(0,100), from = c(-100,100))
# [1]  50  55  60  65  70  75  80  85  90  95 100
于 2021-12-25T01:13:38.900 に答える