【发布时间】:2018-02-05 08:17:07
【问题描述】:
让我们定义这两个变量,用于年份和那一年的冲突程度
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)
现在,对于每个 year,我想计算自上次 conflict_lev 大于 0 以来的年数。可以通过以下循环找到:
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])
}
尽管如此,当我在变量group 中定义多个组时,我正在努力使用dplyr 创建dist_last_conflict。
理想情况下,我应该能够定义一个函数findDistLastConflict(),得到与上面相同的结果并且没有循环:
library(dplyr)
my_df %>%
group_by(group) %>%
mutate(dist_last_conflict = findDistLastConflict(conflict_lev, years))
【问题讨论】:
标签: r dplyr time-series