Возможно, вы захотите преобразовать в матрицу перед транспонированием / масштабированием / повторным транспонированием (фрейм данных -> матрица -> транспонировать -> масштабировать -> транспонировать -> фрейм данных)
В противном случае, похоже, работает хорошо. Вот пример с некоторыми NA
включенными значениями:
set.seed(101)
m <- matrix(rnorm(25),5,5)
m[sample(1:25,size=8)] <- NA
m
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.3260365 NA 0.5264481 -0.1933380 NA
## [2,] 0.5524619 NA -0.7948444 -0.8497547 0.7085221
## [3,] -0.6749438 NA 1.4277555 0.0584655 -0.2679805
## [4,] 0.2143595 NA -1.4668197 -0.8176704 -1.4639218
## [5,] NA NA -0.2366834 NA 0.7444358
scale(m)
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.4885685 NA 0.5628440 0.5661203 NA
## [2,] 1.1159619 NA -0.6077977 -0.8785073 0.7475404
## [3,] -1.1258292 NA 1.3613864 1.1202838 -0.1904198
## [4,] 0.4984359 NA -1.2031558 -0.8078967 -1.3391573
## [5,] NA NA -0.1132769 NA 0.7820366
## attr(,"scaled:center")
## [1] -0.05853976 NaN -0.10882877 -0.45057439 -0.06973609
## attr(,"scaled:scale")
## [1] 0.5475112 0.0000000 1.1286908 0.4543848 1.0410918
Также в документации (?scale
) очень четко указано, как обрабатываются значения NA:
... центрирование выполняется путем вычитания значения столбца (, исключая 'NA's ) из' x 'из соответствующих им столбцов ...
... * root -средство квадрат для (возможно, центрированного) столбца определяется как sqrt (сумма (x ^ 2) / (n-1)), где x - вектор значений не пропущенных , а n - число не пропущенные значения ...
(выделение добавлено)