在 R 中一次重新缩放多个列

  • 本文关键字:缩放 新缩放 一次 r
  • 更新时间 :
  • 英文 :


>我有一个包含数百列的数据帧,我想将这些列重新缩放为 0 到 1 之间,但基于所有列的最小值/最大值。

我的数据如下所示:

a<-c(1, 3, 4, 6, 8.7, 9, 10, 12, 19.3, 20)
b<-c(10, 30, 40, 60, 87, 90, 100, 120, 190, 200)
df<-data.frame(a=a, b=b)
> df
a   b
1   1.0  10
2   3.0  30
3   4.0  40
4   6.0  60
5   8.7  87
6   9.0  90
7  10.0 100
8  12.0 120
9  19.3 190
10 20.0 200

所以这里的最小值是 1,最大值是 200。

我喜欢这个函数,但它只能应用于向量:

rescale(*df*, to = c(0, 1), from = range(*df[,1:2]*, na.rm = TRUE, finite = TRUE))

这应该有效

lapply(df, function(x) scale(x, center = FALSE, scale = max(x, na.rm = TRUE)/100)))

编辑:

如果您的目标是使用任何列的最大值作为重新缩放的参考,则可以执行以下操作:

lapply(df, function(x) scale(x, center = FALSE, scale = max(df, na.rm = TRUE)/100))

您的列将采用以下值:

a
[,1]
[1,]  0.50
[2,]  1.50
[3,]  2.00
[4,]  3.00
[5,]  4.35
[6,]  4.50
[7,]  5.00
[8,]  6.00
[9,]  9.65
[10,] 10.00
attr(,"scaled:scale")
[1] 2
b
[,1]
[1,]   5.0
[2,]  15.0
[3,]  20.0
[4,]  30.0
[5,]  43.5
[6,]  45.0
[7,]  50.0
[8,]  60.0
[9,]  95.0
[10,] 100.0

这是你想要的吗?

mx <- max(df)
mn <- min(df)
(df - mn) / (mx - mn)
a          b
1  0.00000000 0.04522613
2  0.01005025 0.14572864
3  0.01507538 0.19597990
4  0.02512563 0.29648241
5  0.03869347 0.43216080
6  0.04020101 0.44723618
7  0.04522613 0.49748744
8  0.05527638 0.59798995
9  0.09195980 0.94974874
10 0.09547739 1.00000000

最新更新