如何在R中只对数字列进行缩放(有例子)

276 阅读1分钟

你可以使用以下来自dplyr包的语法,在R中只对数据框中的数字列进行缩放:

library(dplyr)

df %>% mutate(across(where(is.numeric), scale))

下面的例子展示了如何在实践中使用这个函数。

例子:使用dplyr只缩放数字列

假设我们在R语言中拥有以下数据框,其中包含各种篮球运动员的信息:

#create data frame
df <- data.frame(team=c('A', 'B', 'C', 'D', 'E'),
                 points=c(22, 34, 30, 12, 18),
                 assists=c(7, 9, 9, 12, 14),
                 rebounds=c(5, 10, 10, 8, 8))

#view data frame
df

  team points assists rebounds
1    A     22       7        5
2    B     34       9       10
3    C     30       9       10
4    D     12      12        8
5    E     18      14        8

假设我们想使用R中的scale函数,只对数据框中的数字列进行缩放。

我们可以使用下面的语法来实现这个目的:

library(dplyr)

#scale only the numeric columns in the data frame
df %>% mutate(across(where(is.numeric), scale))

  team     points   assists    rebounds
1    A -0.1348400 -1.153200 -1.56144012
2    B  1.2135598 -0.432450  0.87831007
3    C  0.7640932 -0.432450  0.87831007
4    D -1.2585064  0.648675 -0.09759001
5    E -0.5843065  1.369425 -0.09759001

请注意,三个数字列(得分助攻篮板)的数值已经被缩放,而球队列则保持不变。

技术说明

R语言中的**scale()**函数使用以下基本语法:

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

其中:

  • x:要缩放的对象的名称
  • center(中心):缩放时是否要减去平均值。默认为TRUE。
  • scale:比例。缩放时是否要除以标准差。默认值为TRUE。

本函数使用以下公式计算比例值:

xscaled = (xoriginal - x̄) / s

其中:

  • xoriginal。原始的X值
  • :样本平均数
  • s:样本标准差

这也被称为标准化数据,它只是将每个原始值转换为一个Z分数

其他资源

下面的教程解释了如何使用dplyr执行其他常见任务:

如何使用dplyr按名称选择列
如何使用dplyr按索引选择列
如何在dplyr中使用带有多个条件的select_if