Нормализация отличается ожидаемым выходным - PullRequest
0 голосов
/ 07 февраля 2020

Я хотел бы использовать нормализацию от 0 до 1, используя эту функцию:

range01 <- function(x){(x-min(x))/(max(x)-min(x))}

, если я использую его для одного случая, он прекрасно работает

Однако я хотел бы использовать его для целый фрейм данных, в котором он находит минимальные и максимальные значения всех столбцов и выполняет нормализацию. Я использовал эту опцию:

data.frame(apply(df[2:ncol(df)], 2, range01))

Однако она не дает ожидаемых результатов. Любая идея, если заявка должна быть другой?

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Вот еще один вариант. Мне всегда нравятся функции mutate_at и mutate_all из dplyr для применения функций к различным столбцам.

#your function
range01 <- function(x){(x-min(x))/(max(x)-min(x))}

#some data
set.seed(1)
df <- data.frame(a = runif(10,1,5), b = runif(10,2,10))


library(dplyr)
mutate_all(df, range01)
#>            a          b
#> 1  0.2307452 0.03608002
#> 2  0.3515024 0.00000000
#> 3  0.5788577 0.62607041
#> 4  0.9586953 0.25454974
#> 5  0.1584522 0.72764475
#> 6  0.9475749 0.39387104
#> 7  1.0000000 0.66359501
#> 8  0.6784675 1.00000000
#> 9  0.6425811 0.24955981
#> 10 0.0000000 0.73697057
1 голос
/ 07 февраля 2020

Может быть, вы можете попробовать код ниже, где вы определяете пользовательскую функцию normalize, то есть

normalize <- Vectorize(function(v) (v-min(v))/diff(range(v)))
dfout <- data.frame(normalize(df))

Пример

set.seed(1)
df <- data.frame(a = runif(10,1,5), b = runif(10,2,10))

> df
          a        b
1  2.062035 3.647797
2  2.488496 3.412454
3  3.291413 7.496183
4  4.632831 5.072830
5  1.806728 8.158731
6  4.593559 5.981594
7  4.778701 7.740948
8  3.643191 9.935249
9  3.516456 5.040281
10 1.247145 8.219562

, а затем вы получите

> dfout
           a          b
1  0.2307452 0.03608002
2  0.3515024 0.00000000
3  0.5788577 0.62607041
4  0.9586953 0.25454974
5  0.1584522 0.72764475
6  0.9475749 0.39387104
7  1.0000000 0.66359501
8  0.6784675 1.00000000
9  0.6425811 0.24955981
10 0.0000000 0.73697057
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...