使用不同范围的变量将变量从 0 标准化到 1?

Mar*_*ayo 1 r function normalization

我有一个像这样的数据框:

df <- data.frame(x1=c(1, 2, 3, 2, 1),
                 x2=c(1, 10, 5, 8, 3))
Run Code Online (Sandbox Code Playgroud)

我正在尝试将两个变量标准化为 0 和 1 之间。因此 2 英寸x1将是 0.5,5 英寸x2也将是 0.5。

我尝试过使用以下标准化函数:

range01 <- function(x){(x-min(x, na.rm = T))/(max(x, na.rm = T)-min(x, na.rm = T))}
df <- range01(df)
Run Code Online (Sandbox Code Playgroud)

相反,它通过整个数据帧的范围(1 到 10)对所有变量进行标准化,给出:

x1          x2
0.0000000   0.0000000           
0.1111111   1.0000000           
0.2222222   0.4444444           
0.1111111   0.7777778           
0.0000000   0.2222222
Run Code Online (Sandbox Code Playgroud)

如何根据两列各自的范围对它们进行标准化?我需要一个系统函数来执行此操作,因为我在 for 循环中处理多个数据帧中的许多变量。

YOL*_*OLO 7

我认为你可以用一行来做:

sapply(df, function(x) (x - min(x, na.rm = T)) / (max(x, na.rm = T) - min(x, na.rm=T)))

      x1        x2
[1,] 0.0 0.0000000
[2,] 0.5 1.0000000
[3,] 1.0 0.4444444
[4,] 0.5 0.7777778
[5,] 0.0 0.2222222
Run Code Online (Sandbox Code Playgroud)

  • 或者 `sapply(df, range01)`。赞成,但你忘记了OP的数据中似乎有“NA”。 (2认同)