Ich versuche, konsekutive Zählungen aus der Noshow-Spalte nach der Spalte PatientID gruppiert. Der folgende Code, den ich verwende, ist sehr nah an den Ergebnissen, die ich erreichen möchte. Die Verwendung der Summe-Funktion gibt jedoch die Summe der gesamten Gruppe zurück. Ich möchte, dass die Summenfunktion nur die aktuelle Zeile und nur die Zeilen summiert, die eine '1' darüber haben. Im Grunde versuche ich zu zählen, wie viele Male ein Patient seinen Termin für jede Zeile notiert und dann auf 0 zurückgesetzt wird, wenn er angezeigt wird. Es scheint, als ob nur ein paar Verbesserungen an meinem unteren Code vorgenommen werden müssen. Allerdings kann ich die Antwort nirgendwo auf dieser Seite finden.So führen Sie fortlaufende Zählungen von Spalte nach Gruppe bedingt nach einer anderen Spalte
transform(df, ConsecNoshows = ifelse(Noshow == 0, 0, ave(Noshow, PatientID, FUN = sum)))
Der obige Code erzeugt den folgenden Ausgang:
#Source: local data frame [12 x 3]
#Groups: ID [2]
#
# PatientID Noshow ConsecNoshows
# <int> <int> <int>
#1 1 0 0
#2 1 1 4
#3 1 0 0
#4 1 1 4
#5 1 1 4
#6 1 1 4
#7 2 0 0
#8 2 0 0
#9 2 1 3
#10 2 1 3
#11 2 0 0
#12 2 1 3
Dies ist das, was ich wünsche:
#Source: local data frame [12 x 3]
#Groups: ID [2]
#
# PatientID Noshow ConsecNoshows
# <int> <int> <int>
#1 1 0 0
#2 1 1 0
#3 1 0 1
#4 1 1 0
#5 1 1 1
#6 1 1 2
#7 2 0 0
#8 2 0 0
#9 2 1 0
#10 2 1 1
#11 2 0 2
#12 2 1 0
[UPDATE] ich würde die fortlaufende Zählung mag um eine Zeile versetzt sind Nieder.
Vielen Dank für jede Hilfe, die Sie im Voraus anbieten können!
Ich wünschte, ich könnte alle Ihre Lösungen markieren, wie sie alle bereitgestellt genau so, wie ich wollte. Vielen Dank für Ihre Hilfe! –