R: получить разницу между увеличивающимися векторами неравномерного размера - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть две последовательности лет, обе увеличиваются с течением времени. данные записываются с шагом 5 лет. Иногда между годом и событием происходят (нет, если этого не происходит). Я хочу знать, в чем разница между годом и ближайшим предыдущим событием .

Вот мой пример:

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()

1 Ответ

1 голос
/ 30 апреля 2020

Это возможное решение с использованием 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
...