Berechne "Gruppenmerkmale" ohne ddply und merge

7

Ich frage mich, ob es einen geradlinigeren Weg gibt, eine bestimmte Art von Variablen zu berechnen, als den Ansatz, den ich normalerweise antrete ...

Das folgende Beispiel erklärt wahrscheinlich am besten. Ich habe einen Datenrahmen mit 2 Spalten (Obst und ob die Frucht verfault ist oder nicht). Ich möchte für jede Zeile z. der Prozentsatz der Früchte der gleichen Kategorie, die faulig ist. Zum Beispiel gibt es 4 Einträge für Äpfel, 2 davon sind verdorben, also sollte jede Zeile für Apfel 0,5 lesen. Die Zielwerte (rein bildlich) sind in der Spalte "gewünschtes Ergebnis" enthalten.

Ich habe dieses Problem vorher schon angesprochen * Verwenden des Befehls "ddply" für die Fruchtvariable (mit Summe / Länge als Funktion), Erstellen eines neuen 3 * 2-Datenrahmens * Verwenden Sie den Befehl "Zusammenführen", um diese Werte zurück in den alten Datenrahmen zu verknüpfen.

Das fühlt sich an wie ein Umweg und ich frage mich, ob es bessere / schnellere Wege gibt, dies zu tun! Idealerweise ein generischer Ansatz, der leicht angepasst werden kann, wenn man anstelle des Prozentsatzes bestimmen muss, ob z.B. alle Früchte sind verfault, alle Früchte sind verfault, usw. etc. usw. ....

Vielen Dank im Voraus,

W

%Vor%     
user1885116 17.03.2013, 22:49
quelle

4 Antworten

11

Das können Sie nur mit ddply und mutate :

tun %Vor%     
Arun 17.03.2013, 23:14
quelle
10

data.table ist super schnell, da es per Referenz aktualisiert wird. Was ist mit der Verwendung?

%Vor%     
statquant 17.03.2013 23:16
quelle
5

Eine Lösung in Basis R ist die Verwendung von ave .

%Vor%

oder kürzer:

%Vor%

Die Standardfunktion, die mit ave angewendet wird, ist mean , daher habe ich sie hier nicht aufgenommen. Sie können jedoch eine andere Funktion angeben, indem Sie FUN = some-function-here anhängen, wenn Sie etwas anderes machen möchten.

    
A5C1D2H2I1M1N2O1R2T1 18.03.2013 04:44
quelle
2

Da ave bereits out ist, kann ich eine Lösung hinzufügen, indem ich meine Basis-R-Funktion der Wahl verwende: aggregate .

Sie erhalten die gewünschten Daten einfach mit:

%Vor%

Sie müssen jedoch merge danach (oder in einem Stück) noch:

%Vor%     
Henrik 18.03.2013 13:24
quelle

Tags und Links