Ich habe eine Daten, die ich zuerst einige Zeilen filtern und diese verbleibenden Zeilen summieren soll.Filtern und Summieren von Zeilen in dplyr
Die Filterbedingungen wie folgt;
- für gr == 1 das letzte Vorkommen von
y_value==10
finden und halten, die alle Zeilen, bevor er (einschließlich des letzten Vorkommens dieser Wert 10 Zeile)! - für gr == 2 Finden Sie das erste Vorkommen von
y_value==10
und behalten Sie alle Zeilen nach ihm (einschließlich der ersten Vorkommen dieses Wertes 10 Zeile)!
Die Daten sind wie folgt;
df <- data.frame(gr=rep(c(1,2),c(8,7)),
y_value=c(c(2,10,10,8,10,6,0,0),c(0,0,10,10,6,8,10)))
gr y_value
1 1 2
2 1 10
3 1 10
4 1 8
5 1 10
6 1 6
7 1 0
8 1 0
9 2 0
10 2 0
11 2 10
12 2 10
13 2 6
14 2 8
15 2 10
Ich habe versucht, dies im Lichte der summing-rows-based-on-conditional-in-groups;
df_temp <- df %>%
group_by(gr) %>%
mutate(rows_to_aggregate=cumsum(y_value==10)) %>%
filter(ifelse(gr==1, rows_to_aggregate !=0, ifelse(gr==2, rows_to_aggregate ==0 | y_value==10, rows_to_aggregate ==0))) %>%
filter(ifelse(gr==1, row_number(gr) != 1, ifelse(gr==2, row_number(gr) != n(), rows_to_aggregate ==0)))
aber das, wenn ich rows_to_aggregate !=0
in gr==1
die Reihen im Interesse tun werden verschwunden sein! Irgendein Führer an diesem Punkt wird geschätzt!
Danke für die clevere Antwort, OTH Ich möchte die '10' nach der' 8' in 'gr == 1' behalten. Das ist der größte Flaschenhals: (Ich habe auch das OP aktualisiert. Entschuldigung, dass ich das erwähnen sollte! – Alexander
@Alexander Ich sehe. Ändern der Filterbedingungen ein wenig tun sollte. Aktualisierte meine Antwort. – Paul
Vielen Dank. Ihr Algorithmus ist groß! – Alexander