Ich habe einen Datenrahmen, der Datenrahmen ist bereits nach Bedarf sortiert, aber jetzt möchte ich es in Gruppen "in Scheiben schneiden".Bedingte Cumsum mit Reset
Diese Gruppen sollten einen maximalen kumulativen Wert von 10 haben, wenn der kumulierte Wert> 10 ist, sollte es die kumulative Summe zurückgesetzt und wieder von vorn beginnen
library(dplyr)
id <- sample(1:15)
order <- 1:15
value <- c(4, 5, 7, 3, 8, 1, 2, 5, 3, 6, 2, 6, 3, 1, 4)
df <- data.frame(id, order, value)
df
Dies ist die Ausgabe, die ich suche (ich habe es getan "von Hand")
cumsum_10 <- c(4, 9, 7, 10, 8, 9, 2, 7, 10, 6, 8, 6, 9, 10, 4)
group_10 <- c(1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 7)
df1 <- data.frame(df, cumsum_10, group_10)
df1
So 2 Probleme, die ich habe
- Wie eine kumulative Variable erstellen, jedes Mal setzt es eine obere Grenze passiert (10 in diesem Fall)
- Wie zählen/Gruppe jede Gruppe
Für den ersten Teil ich ohne Glück einige Kombinationen von group_by und cumsum versuche
df1 <- df %>% group_by(cumsum(c(False, value < 10)))
ich würde statt einer for-Schleife
Dank
Der zweite Teil wird trivial sein ('group_by'), wenn Sie die erste herausfinden können. Ich denke, es wird schwierig sein, das erste ohne eine "for" -Schleife zu machen, es sei denn, jemand wird extrem clever. Willst du Rohre für Effizienz, Eleganz, ...? Wenn in einer Hilfsfunktion eine for-Schleife versteckt wäre, wäre das in Ordnung? –
überprüfen Sie es http://stackoverflow.com/questions/29054459/how-to-speed-up-or-vectorize-a-for-loop/29055443#29055443 – Khashaa
'group_by (bin (Wert, 10))%>% muate (cumsum (Wert)) 'mit' bin' Funktion in der Verbindung – Khashaa