Ich möchte Werte in der Spalte eines dataframe
basierend auf Werten in einer anderen Spalte skalieren. Zum Beispiel, hier ist ein einfaches BeispielEffiziente Skalierung der Spalte basierend auf dem Wert in einer anderen Spalte in R Datenframe
d<-data.frame(x=runif(5,0,10),y=sample(c(1,2),size=5,replace=TRUE))
ergibt die Ausgabe:
x y
1 1.0895865 2
2 0.8261554 2
3 5.3503761 2
4 3.3940759 1
5 6.2786637 1
ich die x-Werte auf der Grundlage der y-Werte skalieren möchten, also was ich will, ist zu haben:
(x|y=1 - average(x's | y=1))/std.dev(x's|y=1)
ersetzen dann die x-Werte in d mit den skalierten Werten, die in ähnlicher Weise für x
Werte mit y=2
.
Was ich bisher getan haben, ist ein bisschen klobig:
d1<-subset(d,y==1)
d2<-subset(d,y==2)
d1$x<-(d1$x-mean(d1$x))/sd(d1$x)
d2$x<-(d2$x-mean(d2$x))/sd(d2$x)
und dann verbindlich, alle Ergebnisse in einem großen Datenrahmen, aber das ist ein bisschen langweilig, da meine aktuelle Daten gibt es insgesamt 50 verschiedene Werte für y und ich möchte das für mehrere (verschiedene) Spalten tun.
Bitte fügen Sie 'set.seed()' zu Ihrem Code hinzu, um es reproduzierbar zu machen und die erwartete Ausgabe zu teilen. – mtoto
Vielleicht suchen Sie nach 'ave (d $ x, d $ y, FUN = Funktion (x) (x-Mittelwert (x))/sd (x))'. – nicola