我有两个年份的序列,都是随着时间的推移而增加的。数据是以5年为单位记录的。有时,在一年之间,会发生一些事件(如果没有发生,则为NA)。我想知道什么是 差异 之间 年 和 最近一次的活动.
这是我的例子。
year = seq(5,45, 5)
event = c(NA, 14,NA, NA, 29, NA, NA, NA, NA)
my.df <- data.frame(year,
event)
和预期的输出。
year event difference
1 5 NA 0 # 0 as not previous data
2 10 14 0 # same
3 15 NA 1 # 1 because 15-14 = 1
4 20 NA 6 # 6 because 20-14 = 6
5 25 29 11 # 11 because 25-14 = 11
6 30 NA 1 # 1 because 30-29 as the closest, not 14 anymore
7 35 NA 6 # etc
8 40 NA 11
9 45 NA 16
有没有什么方法可以让它自动化?事件的发生或多或少是随机的,所以我不能只用 "事件发生 "来处理。lag()
这是一个可能的解决方案,使用 dplyr
和 tidyr
library(dplyr)
library(tidyr)
my.df %>%
mutate(event_filled_lagged = lag(event)) %>%
fill(event_filled_lagged) %>%
mutate(difference = if_else(year > event_filled_lagged, year - event_filled_lagged, NA_real_, missing = 0)) %>%
select(-event_filled_lagged)
产量
# year event difference
# 1 5 NA 0
# 2 10 14 0
# 3 15 NA 1
# 4 20 NA 6
# 5 25 29 11
# 6 30 NA 1
# 7 35 NA 6
# 8 40 NA 11
# 9 45 NA 16