Dies mag grundlegend sein, aber ich habe versucht, es seit Tagen herauszufinden und habe keine Antwort gefunden.Benutzerdefinierte Funktion basierend auf mehreren Spalten gruppiert nach Kategorie
Ich versuche eine neue Menge basierend auf zwei Spalten "Konzentration" und "Fläche" nach "Einzugsgebiet" zu berechnen. Ich habe eine Funktion geschrieben, um den Unterschied in der Konzentration für jede Zeile und die Zeile mit der größten Fläche nach Flächenanteil in diesem Einzugsgebiet zu berechnen, aber es funktioniert nicht mit dplyr
oder aggregate
(. Es funktioniert gut mit, aber dann gibt eine Liste
Idealerweise möchte ich eine Spalte auf den Datenrahmen addieren oder die Konzentration Spalte ganz ersetzen Hier ist die Datenrahmen ‚lev‘:..
area catchment concentration
1 1 Yup 2.00000
2 10 Yup 40.50000
3 25 Yup 50.82031
4 35 Yup 50.00000
5 1 Nope 1.00000
6 10 Nope 5.00000
7 25 Nope 40.08333
8 35 Nope 38.00000
Hier ist die Funktion:
lever <- function(data=lev, x=data[,"concentration"], y=data[,"area"]){
N= which.max(y)
L = (x - x[N]) * y/max(y)
return(L)}
Und hier das gewünschte Ergebnis ist:
area catchment concentration leverage
1 1 Yup 2.00000 -1.3714286
2 10 Yup 40.50000 -2.7142857
3 25 Yup 50.82031 0.5859375
4 35 Yup 50.00000 0.0000000
5 1 Nope 1.00000 -1.0571429
6 10 Nope 5.00000 -9.4285714
7 25 Nope 40.08333 1.4880952
8 35 Nope 38.00000 0.0000000
Mit by
ich zwei Listen mit den Ergebnissen für jeden Einzug bekommen:
by(lev, lev$catchment, lever)
aber ich mag verwenden, um die Funktion auf mehreren Spalten kategorisierten durch mehrere Faktoren (z Datum neben Einzug) und ich
'falsche Anzahl von Dimensionen'
Fehler mit doBy
und dplyr
.
Wir können bessere Antworten geben, wenn Sie ein [reproduzierbares Beispiel] bereitstellen (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5965451#5965451). –
Danke für die Bearbeitung, um es reproduzierbar zu machen. Ich werde es nächstes Mal besser machen :) – benjabiker