У меня фактически есть письменная функция для автоматической нормализации, которую я использую.Это следующее:
n <-function(x){
d=dim(x)
c=colMeans(x)
xm=sapply(1:d[2],function(i){
x[,i]=x[,i]-c[i]
})
# xm is the x with removed means
v=var(xm) # variance matrix
xn=sapply(1:d[2],function(i){
xm[,i]=xm[,i]/sqrt(v[i,i])
})
xn
}
Затем просто примените эту функцию к нужным столбцам.
tochange=c("age","weight","score")
df[,tochange]=n(df[,tochange])
> df
diagnosis gender area age weight score
[1,] 447 1 95.88 -0.2161373 0.3000106 -0.5282662
[2,] 167 0 109.30 0.5943775 0.3212536 0.7290858
[3,] 444 0 117.50 1.4048924 1.1048216 1.3455747
[4,] 100 0 88.05 -1.0266521 -0.1226130 -1.0757939
[5,] 227 1 97.45 -0.7564805 -1.6034728 -0.4706004
compactness class
[1,] 80.00 0
[2,] 35.60 2
[3,] 64.20 2
[4,] 35.23 1
[5,] 70.00 1