est-il possible de créer une colonne qui est le nombre de roulements du nombre de valeurs vraies booléennes à partir des 4 lignes précédentes, également partitionnée par une autre colonne?
L'exemple ci-dessous montre le résultat souhaité, où la colonne de sortie est Le nombre de nombres de valeurs vraies pour les 4 rangées précédentes - ceci est également partitionné par la première colonne. Y a-t-il une façon de le faire avec dplyr? p>
Exemple de données: P>
a 2016-01-01 TRUE 0 a 2016-01-02 TRUE 1 a 2016-01-03 FALSE 2 a 2016-01-04 FALSE 2 a 2016-01-05 FALSE 2 a 2016-01-06 FALSE 1 a 2016-01-07 FALSE 0 a 2016-01-08 TRUE 0 a 2016-01-09 TRUE 1 a 2016-01-10 TRUE 2 a 2016-01-11 TRUE 3 b 2016-01-01 TRUE 0 b 2016-01-02 TRUE 1 b 2016-01-03 FALSE 2 b 2016-01-04 TRUE 2 b 2016-01-05 FALSE 3 b 2016-01-06 TRUE 2 b 2016-01-07 TRUE 2 b 2016-01-08 FALSE 3 b 2016-01-09 FALSE 2 b 2016-01-10 FALSE 2 b 2016-01-11 FALSE 1
3 Réponses :
Vous pouvez utiliser group_by () code> et profiter du fait que Boolean a également des représentations numériques.
library(dplyr)
library(zoo)
df %>%
group_by(col1, col2) %>%
mutate(col4 = rollsum(col3, k = 4) - col3)
Les valeurs booléennes comptent comme 1 pour T et 0 pour F, vous pouvez donc exploiter cela pour utiliser Cumsum.
Base R Réponse:
df$col4<- cumsum(lag(df$col2, 4, default = 0))