Ho un frame di dati, il frame di dati è già ordinato in base alle esigenze, ma ora mi piacerebbe "affettarlo" in gruppi.Cumsum condizionale con reset
Questi gruppi devono avere un valore cumulativo massimo di 10. Quando il valore cumulativo è> 10, dovrebbe ripristinare la somma cumulativa e ricominciare da capo
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
Questa è l'uscita che sto cercando (L'ho fatto "manualmente")
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
Così sto avendo problemi 2
- Come creare una variabile cumulativo che azzera ogni volta che passa un limite superiore (10 in questo caso)
- Come contare/gruppo ogni gruppo
Per la prima parte stavo cercando alcune combinazioni di group_by e cumSum senza fortuna
df1 <- df %>% group_by(cumsum(c(False, value < 10)))
preferirei un tubo (%>%) soluzione invece di un ciclo
Grazie
La seconda parte sarà banale ('group_by') se riesci a capire il primo. Penso che sarà difficile fare il primo senza un ciclo 'for', a meno che qualcuno non sia estremamente intelligente. Vuoi tubi per efficienza, eleganza, ...? Se ci fosse un ciclo for nascosto in una funzione helper, sarebbe OK? –
controllalo http://stackoverflow.com/questions/29054459/how-to-speed-up-or-vectorize-a-for-loop/29055443#29055443 – Khashaa
'group_by (bin (valore, 10))%>% mutare (cumsum (valore)) 'utilizzando la funzione' bin' nel collegamento – Khashaa