You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言:提取scale()的标准化值并去除附加属性的方法

提取scale()标准化数值并去除附加属性的方法

问题描述

使用scale()函数对多列数据做标准化处理后,新生成的列带有scaled:center和scaled: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

解决方案

scale()函数返回的是带属性的矩阵,只需将其转换为普通数值向量即可去除附加属性,以下是两种简洁实现方式:

方法1:用as.numeric()转换

将scale()的结果包裹在as.numeric()中,直接把矩阵转为数值向量:

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 = ~ as.numeric(scale(.x)),
               .names = '{.col}_z')) |>
 str()

方法2:用c()转换

利用c()函数的特性,将矩阵展开为数值向量:

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 = ~ c(scale(.x)),
               .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  -0.336 0.352 -0.155 0.559 -1.84 0.433 0.666 0.695 0.08 -0.095
 $ x2_z: num  0.61 -1.006 0.181 -0.688 1.55 -0.122 0.429 -0.323 -0.433 0.802
 $ x3_z: num  -0.672 -0.973 1.079 -1.213 -0.816 1.432 0.466 0.641 -0.073 0.139

可以看到,新生成的x1_z、x2_z、x3_z列已经是普通数值向量,不再带有任何附加属性。

内容的提问来源于stack exchange,提问作者user1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:50:33