标准化为组内 100 个数据

Normalized to 100 data within groups

我有一个如下所示的数据集:

Var Trait   Value
0   Trait1  42.26
1   Trait1  41.81
2   Trait1  41.21
0   Trait2  47.82
1   Trait2  51.44
2   Trait2  51.42
0   Trait3  10.27
1   Trait3  10.63
2   Trait3  10.14

我想添加第四列,其中针对每个特征和 var1 标准化为 100 个数据:

(42.26/42.26)*100=100

(41.81/42.26)*100=98.93

(41.21/42.26)*100=97.51

对于特征 2 和 var1=1,值大于 var1=0 值,因此在这种情况下第 5 行将按如下方式计算: (47.82/51.44)*100=92.94

如果你的数据是data.table:

data[, col4:= (Value/max(Value))*100, by= Trait]

使用dplyr

library(dplyr)

df %>% 
  group_by(Trait) %>% 
  mutate(Result = Value/max(Value) * 100)

# Output
# Source: local data frame [9 x 4]
# Groups: Trait [3]
# 
#     Var  Trait Value    Result
#   (int) (fctr) (dbl)     (dbl)
# 1     0 Trait1 42.26 100.00000
# 2     1 Trait1 41.81  98.93516
# 3     2 Trait1 41.21  97.51538
# 4     0 Trait2 47.82  92.96267
# 5     1 Trait2 51.44 100.00000
# 6     2 Trait2 51.42  99.96112
# 7     0 Trait3 10.27  96.61336
# 8     1 Trait3 10.63 100.00000
# 9     2 Trait3 10.14  95.39040

或使用标准 R:

dat$Normalized <- (dat$Value / ave(dat$Value, dat$Trait, FUN = max)) * 100
> dat
  Var  Trait Value Normalized
1   0 Trait1 42.26  100.00000
2   1 Trait1 41.81   98.93516
3   2 Trait1 41.21   97.51538
4   0 Trait2 47.82   92.96267
5   1 Trait2 51.44  100.00000
6   2 Trait2 51.42   99.96112
7   0 Trait3 10.27   96.61336
8   1 Trait3 10.63  100.00000
9   2 Trait3 10.14   95.39040