изменить масштаб нескольких столбцов одновременно в R - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть фрейм данных с полями столбцов, я хочу изменить масштаб этих столбцов, чтобы они были между 0 и 1, но на основе мин / макс всех столбцов

мои данные выглядят так:

a<-c(1, 3, 4, 6, 8.7, 9, 10, 12, 19.3, 20)
b<-c(10, 30, 40, 60, 87, 90, 100, 120, 190, 200)
df<-data.frame(a=a, b=b)
> df
      a   b
1   1.0  10
2   3.0  30
3   4.0  40
4   6.0  60
5   8.7  87
6   9.0  90
7  10.0 100
8  12.0 120
9  19.3 190
10 20.0 200

Итак, здесь минимум равен 1, а максимум равен 200.

Мне понравилась эта функция, но она может быть применена только к вектору:

rescale(*df*, to = c(0, 1), from = range(*df[,1:2]*, na.rm = TRUE, finite = TRUE))

Ответы [ 2 ]

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

это должно работать

lapply(df, function(x) scale(x, center = FALSE, scale = max(x, na.rm = TRUE)/100)))

РЕДАКТИРОВАТЬ:

, если ваша цель - использовать максимальное значение любого из столбцов в качестве ссылки для масштабирования, вы можете сделать что-то вроде этого:

lapply(df, function(x) scale(x, center = FALSE, scale = max(df, na.rm = TRUE)/100))

ваши столбцы примут следующие значения:

a
       [,1]
 [1,]  0.50
 [2,]  1.50
 [3,]  2.00
 [4,]  3.00
 [5,]  4.35
 [6,]  4.50
 [7,]  5.00
 [8,]  6.00
 [9,]  9.65
[10,] 10.00
attr(,"scaled:scale")
[1] 2

b
       [,1]
 [1,]   5.0
 [2,]  15.0
 [3,]  20.0
 [4,]  30.0
 [5,]  43.5
 [6,]  45.0
 [7,]  50.0
 [8,]  60.0
 [9,]  95.0
[10,] 100.0

это то, что вы хотите?

1 голос
/ 07 февраля 2020
mx <- max(df)
mn <- min(df)
(df - mn) / (mx - mn)

            a          b
1  0.00000000 0.04522613
2  0.01005025 0.14572864
3  0.01507538 0.19597990
4  0.02512563 0.29648241
5  0.03869347 0.43216080
6  0.04020101 0.44723618
7  0.04522613 0.49748744
8  0.05527638 0.59798995
9  0.09195980 0.94974874
10 0.09547739 1.00000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...