用 R 按不同的列排列 [0,1]

Ranging [0,1] by different columns with R

我正在尝试将 table 具有不同属性(数​​字、布尔值...)的人标准化为 [0,1] 范围,并且我尝试了此函数:

ranging<-function(x){(x-min(x))/(max(x)-min(x))}

但显然它从整个 table 中获取最小值和最大值。我不习惯 R 编程,如何获得每列的最小值和最大值,以便正确规范化每列?

如果我们使用 dplyrmutate_each 可以采用 ranging 函数并应用于数据集的所有列。

 library(dplyr)
 df1 %>% 
     mutate_each(funs(ranging))

数据

df1 <- structure(list(v3 = c(0L, 2L, 1L, 4L, 2L, 2L, 2L, 2L), 
v4 = c(1L, 
4L, 2L, 5L, 3L, 3L, 3L, 3L), v5 = c(2L, 6L, 4L, 6L, 4L, 4L, 4L, 
4L), v6 = c(3L, 5L, 7L, 4L, 5L, 5L, 5L, 5L)), .Names = c("v3", 
"v4", "v5", "v6"), row.names = c(NA, -8L), class = "data.frame")

假设您正在使用一个名为 df 的 data.frame 没有任何因子变量,下面的代码应该可以在没有任何特殊包的情况下工作(正如@user20650所建议的:

ranging<-function(x){(x-min(x))/(max(x)-min(x))}
dfNorm <- lapply(df, ranging)

如果您的 data.frame 包含不应该归一化的因子变量,您可以使用以下内容:

    dfNorm <- lapply(df, function(x) ifelse(is.factor(x), x, ranging(x)))