R

时间:2016-04-08 11:42:04

标签: r range normalization

我正在尝试使用[0,1]范围规范化具有不同属性(数​​字,布尔值...)的人员表,并且我尝试了这个函数:

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

但显然它从整个表中得到了最小值和最大值。我不习惯R编程,如何获得每列的最小值和最大值,以便正确地对每列进行标准化?

2 个答案:

答案 0 :(得分:3)

假设您正在使用名为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)))

答案 1 :(得分:1)

如果我们使用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")