根据 R 中的一个因子对数值变量进行归一化

Normalizing numeric variable according to a factor in R

我正在尝试根据第二个变量(一个因子)规范化一个变量(使用最小值和最大值)。

diamonds数据帧为例会更清楚。

这会将 carat 变量标准化为 0-1 区间:

di <- diamonds
di$caratn <- (di$carat-min(di$carat))/(max(di$carat)-min(di$carat))

但我想根据 clarity 变量(这是一个因素)进行归一化。也就是说,取给定 clarity 的所有 carat 值并归一化 0-1。

结果是 clarity SI2 中最高的 carat 值为 1,其他净度也是如此。

这是一个使用 ave() 的解决方案:

di <- within(di,caratn <- ave(carat,clarity,FUN=function(x) (x-min(x))/diff(range(x))))