Zu den mir vertrauten Funktionen gehören Skalierung von Basis R und Neuskalierung von ARM.
Vielleicht wäre der beste Weg, eine Variante von apply zu verwenden und eine oder mehrere Variablen anzugeben, die als Gruppierungsvariablen verwendet werden sollen.
r
standardization
centering
Michael Bishop
quelle
quelle
Antworten:
Hier ist eine mögliche Plyr- Lösung. Beachten Sie, dass es auf der
transform()
Basisfunktion beruht .(Wir können überprüfen , ob es sich wie bei zB erwartet funktioniert,
with(subset(my.df, sex=="F" & group=="A"), scale(x))
)Grundsätzlich beschreibt das 2. Argument, wie die Daten "aufgeteilt" werden, das 3. Argument, welche Funktion auf jeden Block angewendet werden soll. Mit dem obigen
x.std
Befehl wird eine Variable an den data.frame angehängt. Verwendenx
Sie diese Option, wenn Sie Ihre ursprüngliche Variable durch die skalierte ersetzen möchten.quelle
quelle
Hier ist eine data.table- Lösung. Es ist definitiv schneller als Plyr (nur für große Datenmengen relevant). Vielleicht mache ich später ein Dplyr-Beispiel.
(Ja, ich habe eine Frage wiederentdeckt, die ich vor Jahren gestellt habe, als ich ein R-Noob war.)
quelle
Sie können dies (unter anderem) verwenden
tapply
(dasplyr
Paket enthält viele andere Optionen, die für Ihre spezielle Situation möglicherweise besser geeignet sind):quelle
Diese Antwort stammt aus einem Whitepaper von Mahmood Arai. Es hat den bequemen Nebeneffekt, die zentrierten Ergebnisse mit dem Präfix "C" zu kennzeichnen:
quelle
Hier ist eine aktualisierte Implementierung mit dplyr von tidyverse .
quelle