Définissons ces deux variables, pour l'année et le niveau de conflit dans cette annéeTrouver la distance temporelle basée sur la valeur de la variable dans les données du panneau
set.seed(28100)
years <- 1900:2010
conflict_lev <- sample(0:4, 111, replace = T, prob = c(0.9, 0.05, 0.03, 0.02, 0.01))
my_df <- data.frame(years, conflict_lev)
Maintenant, pour chaque year
Je veux calculer le nombre d'années écoulées depuis la dernière fois conflict_lev
était plus de 0. cela peut être trouvé avec cette boucle:
my_df$dist_last_conflict <- NA
for (i in 1:length(years)) {
my_df$dist_last_conflict[i] <- min(years[i] - years[years < years[i] & conflict_lev > 0])
}
Néanmoins, je me bats pour créer dist_last_conflict
avec dplyr
et quand j'ai plusieurs groupes tels que définis dans lavariables.
Idéalement, je devrais être en mesure de définir une fonction findDistLastConflict()
qui obtiennent le même résultat que ci-dessus et sans boucle:
library(dplyr)
my_df %>%
group_by(group) %>%
mutate(dist_last_conflict = findDistLastConflict(conflict_lev, years))