У меня есть данные, где переменная «Закон» указывает на изменения в законодательстве в разных местах («Место»):
Person Place Year Law
1 A 1990 0
2 A 1991 1
3 A 1992 1
4 B 1990 0
5 B 1991 0
6 B 1992 1
7 B 1993 1
8 B 1993 1
9 B 1993 1
10 B 1992 1
В основном закон был введен в действие в 1991 году и оставался в силе в течение всех последующих периодов времени. Он был внедрен на месте B в 1992 году и оставался в силе и т. Д.
Я хотел бы создать новую переменную, которая принимает значение 0 для года, в который был введен закон, 1 для 1 года после, 2 для 2 года после, -1 для предыдущего года, -2 для 2 лет до и т. д.
Мне нужен окончательный фрейм данных, чтобы он выглядел так:
Person Place Year Law timeline
1 A 1990 0 -1
2 A 1991 1 0
3 A 1992 1 1
4 B 1990 0 -2
5 B 1991 0 -1
6 B 1992 1 0
7 B 1993 1 1
8 B 1993 1 2
9 B 1993 1 2
10 B 1992 1 1
Я пытался:
library(dplyr)
df %>%
group_by(Place) %>%
arrange(Year) %>%
mutate(timeline = rank(Law))
но он не работает так, как мне нужно. Что я делаю неправильно? Могу ли я сделать это в dplyr или мне нужно создать комплекс для цикла?