2017-12-06 6 views
1

Ich suchte in Google und SO aber konnte keine Antwort auf meine Frage finden.Wie erhält man den Wert aus der nächsten Zeile, wenn die Bedingung erfüllt ist?

Ich versuche, einen Wert aus der ersten heraufkommenden Zeile zu erhalten, wenn die Bedingung erfüllt ist.

Beispiel:

Pupil participation bonus 
    2   55   6 
    2   33   3 
    2   88   9 
    2   0   -100 
    2   44   4 
    2   66   7 
    2   0   -33 

zu

Pupil participation bonus bonusAtNoParti sumBonusTillParticipation=0 
    2   55   6   -94     6+3+9 = 18 
    2   33   3   -97      3+9 = 12 
    2   88   9   -91      9 
    2   0   -100  0      0 
    2   44   4   -29      4+7=11 
    2   66   7   -26      7 
    2   0   -33   0      0 

Also muß ich dies tun: Iterate durch den Datenrahmen und nächste Zeilen überprüfen, bis die Teilnahme an gleich 0 und den Bonus von dieser Linie bekommen und füge den Bonus aus der aktuellen Zeile hinzu und schreibe ihn in bonusAtNoPati.

Mein Problem hier ist die „nächste Zeilen prüfen, bis die Teilnahme an gleich 0 und den Bonus von dieser Linie bekommen“ Ich weiß, wie man durch die ganze Liste iterieren, aber nicht nach dem aktuellen Punkt (Reihe) ich brauchen würde, um Mach diesen Prozess zur ganzen Liste, wo ich irgendeinen zufälligen Partizipationswert in zufälliger Reihenfolge bekommen kann.

Hat jemand eine Idee, wie man es realisiert?

Bearbeiten, ich fügte auch eine andere Spalte ("sumBonusTillParticipation = 0", nur Summenwert ist erforderlich), die noch schwieriger zu realisieren ist. R ist eine solche harte language = (

Antwort

1

Sie which die participation Zeilennummer 0.

df <- read.table(text = 'Pupil participation bonus 
      2   55   6 
      2   33   3 
      2   88   9 
      2   0   -100 
      2   44   4 
      2   66   7 
      2   0   -33', header = T) 

index <- c(0, which(df$participation == 0)) 
diffs <- diff(index) 
df$tp <- rep(df$bonus[index], times = diffs) 
df$bonusAtNoParti <- df$bonus + df$tp 
df$bonusAtNoParti[index] <- 0 
df$tp <- NULL 

    Pupil participation bonus bonusAtNoParti 
1  2   55  6   -94 
2  2   33  3   -97 
3  2   88  9   -91 
4  2    0 -100    0 
5  2   44  4   -29 
6  2   66  7   -26 
7  2    0 -33    0 
+0

bekommen können zu lernen, was mit dieser Antwort OP falsch? Es scheint, die gewünschte Ausgabe zu reproduzieren. I don Wenn diese Antwort nicht für den einen oder anderen Fall funktioniert, zeigen Sie bitte diesen Fall an und bearbeiten Sie Ihre Frage – nicola

+0

Hey nicola, myincas hat gerade seine Antwort bearbeitet, mach dir keine Sorgen =) – fReezMA

+0

@fReezMA Du solltest ein Feedback geben . Wenn diese Antwort Ihnen geholfen hat, bitte upvote oder akzeptiere sie (oder beides). Zumindest sollten Sie sagen, ob es Ihr Problem gelöst hat oder nicht. Die Leute hier geben einen Teil ihrer Zeit für Sie und die Gemeinschaft, und Sie sollten zumindest ein Feedback geben. – nicola

Verwandte Themen