R中的最小-最大规格化,基于另一列设置最小和最大组
使用R,我试图对一个列进行最小-最大规格化,但我需要按另一列确定的组设置最小值和最大值,而不是使用所有列值的最小值和最大值 请参见此示例:R中的最小-最大规格化,基于另一列设置最小和最大组,r,normalization,R,Normalization,使用R,我试图对一个列进行最小-最大规格化,但我需要按另一列确定的组设置最小值和最大值,而不是使用所有列值的最小值和最大值 请参见此示例: x <- c(0, 0.5, 1, 2.5, 0.2, 0.3, 0.5, 0,0,0.1, 0.7) y <- c(1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3) df <- data.frame (x, y) df x我不确定你是否需要下面这样的东西 dfout <- within(df,xnorm <
x <- c(0, 0.5, 1, 2.5, 0.2, 0.3, 0.5, 0,0,0.1, 0.7)
y <- c(1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3)
df <- data.frame (x, y)
df
x我不确定你是否需要下面这样的东西
dfout <- within(df,xnorm <- ave(x,y,FUN = function(v) (v-min(v))/diff(range(v))))
输出:
# A tibble: 11 x 3
x y xnorm
<dbl> <dbl> <dbl>
1 0 1 0
2 0.5 1 0.2
3 1 1 0.4
4 2.5 1 1
5 0.2 2 0
6 0.3 2 0.333
7 0.5 2 1
8 0 3 0
9 0 3 0
10 0.1 3 0.143
11 0.7 3 1
#一个tible:11 x 3
xyxnorm
1 0 1 0
2 0.5 1 0.2
3 1 1 0.4
4 2.5 1 1
5 0.2 2 0
6 0.3 2 0.333
7 0.5 2 1
8 0 3 0
9 0 3 0
10 0.1 3 0.143
11 0.7 3 1
或者,在mutate()
语句中,您可以使用函数aggregate
aggregate(x, list(y), min)
Group.1 x
1 1 0.0
2 2 0.2
3 3 0.0
aggregate(x, list(y), max)
Group.1 x
1 1 2.5
2 2 0.5
3 3 0.7
# You can create your own function like this
myFun <- function (u) {
c(min(u), mean(u), max(u))
}
# and pass myFun to aggregate
aggregate(x, list(y), myFun)
Group.1 x.1 x.2 x.3
1 1 0.0000000 1.0000000 2.5000000
2 2 0.2000000 0.3333333 0.5000000
3 3 0.0000000 0.2000000 0.7000000
# alternative is "by" different output format
by(x, list(y), myFun)
聚合(x,列表(y),最小值)
第1组x
1 1 0.0
2 2 0.2
3 3 0.0
聚合(x,列表(y),最大值)
第1组x
1 1 2.5
2 2 0.5
3 3 0.7
#您可以像这样创建自己的函数
我的乐趣
# A tibble: 11 x 3
x y xnorm
<dbl> <dbl> <dbl>
1 0 1 0
2 0.5 1 0.2
3 1 1 0.4
4 2.5 1 1
5 0.2 2 0
6 0.3 2 0.333
7 0.5 2 1
8 0 3 0
9 0 3 0
10 0.1 3 0.143
11 0.7 3 1
aggregate(x, list(y), min)
Group.1 x
1 1 0.0
2 2 0.2
3 3 0.0
aggregate(x, list(y), max)
Group.1 x
1 1 2.5
2 2 0.5
3 3 0.7
# You can create your own function like this
myFun <- function (u) {
c(min(u), mean(u), max(u))
}
# and pass myFun to aggregate
aggregate(x, list(y), myFun)
Group.1 x.1 x.2 x.3
1 1 0.0000000 1.0000000 2.5000000
2 2 0.2000000 0.3333333 0.5000000
3 3 0.0000000 0.2000000 0.7000000
# alternative is "by" different output format
by(x, list(y), myFun)