用 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 编程,如何获得每列的最小值和最大值,以便正确规范化每列?
如果我们使用 dplyr
,mutate_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)))
我正在尝试将 table 具有不同属性(数字、布尔值...)的人标准化为 [0,1] 范围,并且我尝试了此函数:
ranging<-function(x){(x-min(x))/(max(x)-min(x))}
但显然它从整个 table 中获取最小值和最大值。我不习惯 R 编程,如何获得每列的最小值和最大值,以便正确规范化每列?
如果我们使用 dplyr
,mutate_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)))