【发布时间】:2018-05-01 21:00:56
【问题描述】:
我有数据,其中“法律”变量表示不同地方(“地点”)的立法变化:
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 年在 A 地实施,并在随后的所有时间段内一直有效。它于 1992 年在 B 地实施并一直有效,依此类推。
我想创建一个新变量,该变量在法律实施的那一年取值为 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 中执行此操作还是需要创建一个复杂的 for 循环?
【问题讨论】: