从规模中删除属性

问题描述 投票:0回答:2

我正在使用

scale()
函数缩放多列。

如何仅从

scale()
中提取缩放值并删除所有属性?

set.seed(5)
data.frame(x1 = runif(10, 1, 5),
           x2 = runif(10, 1, 5),
           x3 = runif(10, 1, 5)) |>
 mutate(across(.cols = num_range('x', 1:3),
               .fns = scale,
               .names = '{.col}_z')) |>
 str()

回归

'data.frame':   10 obs. of  6 variables:
 $ x1  : num  2.71 3.45 2.91 3.67 1.09 ...
 $ x2  : num  3.33 1.74 2.91 2.05 4.26 ...
 $ x3  : num  1.9 1.44 4.6 1.07 1.68 ...
 $ x1_z: num [1:10, 1] -0.336 0.352 -0.155 0.559 -1.84 ...
  ..- attr(*, "scaled:center")= num 3.07
  ..- attr(*, "scaled:scale")= num 1.08
 $ x2_z: num [1:10, 1] 0.61 -1.006 0.181 -0.688 1.55 ...
  ..- attr(*, "scaled:center")= num 2.73
  ..- attr(*, "scaled:scale")= num 0.985
 $ x3_z: num [1:10, 1] -0.672 -0.973 1.079 -1.213 -0.816 ...
  ..- attr(*, "scaled:center")= num 2.94
  ..- attr(*, "scaled:scale")= num 1.54
r dplyr scale
2个回答
1
投票

默认情况下,

center
函数的
scale
scale
参数设置为
TRUE

scale(x, center = TRUE, scale = TRUE)

在文档的Value部分,它指出:

For scale.default, the centered, scaled matrix. The numeric centering and scalings used (if any) are returned as attributes "scaled:center" and "scaled:scale"

这些属性就是您在输出中看到的。如果你想排除属性,你可以对输出进行切片以获得返回的矩阵并排除其余的,如@stefan评论

set.seed(5)
data.frame(x1 = runif(10, 1, 5),
           x2 = runif(10, 1, 5),
           x3 = runif(10, 1, 5)) |>
 dplyr::mutate(across(.cols = num_range('x', 1:3),
               .fns = ~scale(.x, center = T, scale = T)[, 1],
               .names = '{.col}_z')) |>
 str()

回归

'data.frame':   10 obs. of  6 variables:
 $ x1  : num  2.78 1.24 2.1 1.12 1.06 ...
 $ x2  : num  4.26 1.94 4.31 3.13 4.72 ...
 $ x3  : num  2.54 3.27 4.69 4.9 4.73 ...
 $ x1_z: num  0.459 -1.082 -0.219 -1.195 -1.262 ...
 $ x2_z: num  0.806 -1.517 0.849 -0.324 1.258 ...
 $ x3_z: num  -0.465 0.261 1.684 1.9 1.728 ...

希望这有帮助


0
投票

这是一个愚蠢但有效的方法:

X0 <- scale(matrix(rnorm(20),4,5)) # has attributes
X <- X0[,1:5]                      # same matrix without attributes

只需抓取矩阵的所有列并将它们存储在一个新矩阵中。 这消除了属性。

© www.soinside.com 2019 - 2024. All rights reserved.