Функцию scale() в R можно использовать для масштабирования значений в векторе, матрице или фрейме данных.
Эта функция использует следующий базовый синтаксис:
scale(x, center = TRUE , scale = TRUE )
куда:
- x : Имя масштабируемого объекта.
- center : вычитать ли среднее значение при масштабировании. Значение по умолчанию — ИСТИНА.
- scale : Делить ли на стандартное отклонение при масштабировании. Значение по умолчанию — ИСТИНА.
Эта функция использует следующую формулу для вычисления масштабированных значений:
x в масштабе = (x исходный - x̄ ) / с
куда:
- x original : Исходное значение x
- x̄ : Среднее значение выборки
- s : Стандартное отклонение выборки
Это также известно как стандартизация данных, при которой каждое исходное значение просто преобразуется в z-оценку .
В следующих примерах показано, как использовать эту функцию на практике.
Пример 1: Масштабирование значений в векторе
Предположим, у нас есть следующий вектор значений в R:
#define vector of values
x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)
#view mean and standard deviation of values
mean(x)
[1] 5
sd(x)
[1] 2.738613
В следующем коде показано, как масштабировать значения в векторе с помощью функции scale() :
#scale the values of x
x_scaled <- scale(x)
#view scaled values
x_scaled
[,1]
[1,] -1.4605935
[2,] -1.0954451
[3,] -0.7302967
[4,] -0.3651484
[5,] 0.0000000
[6,] 0.3651484
[7,] 0.7302967
[8,] 1.0954451
[9,] 1.4605935
Вот как было рассчитано каждое масштабированное значение:
- Значение 1: (1 – 5) / 2,738613 = -1,46
- Значение 2: (2 – 5) / 2,738613 = -1,09
- Значение 3: (3 – 5) / 2,738613 = -0,73
И так далее.
Обратите внимание, что если бы мы указали scale=FALSE , то функция не делилась бы на стандартное отклонение при выполнении масштабирования:
#scale the values of x but don't divide by standard deviation
x_scaled <- scale(x, scale = FALSE )
#view scaled values
x_scaled
[,1]
[1,] -4
[2,] -3
[3,] -2
[4,] -1
[5,] 0
[6,] 1
[7,] 2
[8,] 3
[9,] 4
Вот как было рассчитано каждое масштабированное значение:
- Значение 1: 1 – 5 = -4
- Значение 2: 2 – 5 = -3
- Значение 3: 3 – 5 = -2
И так далее.
Пример 2. Масштабирование значений столбцов во фрейме данных
Чаще всего мы используем функцию scale(), когда хотим масштабировать значения в нескольких столбцах фрейма данных так, чтобы каждый столбец имел среднее значение 0 и стандартное отклонение 1.
Например, предположим, что у нас есть следующий фрейм данных в R:
#create data frame
df <- data.frame(x=c(1, 2, 3, 4, 5, 6, 7, 8, 9),
y=c(10, 20, 30, 40, 50, 60, 70, 80, 90))
#view data frame
df
x y
1 1 10
2 2 20
3 3 30
4 4 40
5 5 50
6 6 60
7 7 70
8 8 80
9 9 90
Обратите внимание, что диапазон значений переменной y намного больше, чем диапазон значений переменной x.
Мы можем использовать функцию scale() для масштабирования значений в обоих столбцах таким образом, чтобы масштабированные значения x и y имели среднее значение 0 и стандартное отклонение 1:
#scale values in each column of data frame
df_scaled <- scale(df)
#view scaled data frame
df_scaled
x y
[1,] -1.4605935 -1.4605935
[2,] -1.0954451 -1.0954451
[3,] -0.7302967 -0.7302967
[4,] -0.3651484 -0.3651484
[5,] 0.0000000 0.0000000
[6,] 0.3651484 0.3651484
[7,] 0.7302967 0.7302967
[8,] 1.0954451 1.0954451
[9,] 1.4605935 1.4605935
И столбец x, и столбец y теперь имеют среднее значение 0 и стандартное отклонение 1.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в R:
Как нормализовать данные в R
Как стандартизировать данные в R
Как усреднить по столбцам в R