gpt4 book ai didi

r - 根据 R 中的事件创建条件时间线

转载 作者:行者123 更新时间:2023-12-02 02:54:40 26 4
gpt4 key购买 nike

我有数据,其中“法律”变量表示不同地方(“地方”)的立法变化:

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 循环?

最佳答案

您可以用实现法则的索引减去row_numer:

df %>% 
arrange(Year) %>%
group_by(Place) %>%
mutate(timeline = row_number() - which(diff(Law) == 1) - 1) %>%
arrange(Place)

# A tibble: 7 x 5
# Groups: Place [2]
# Person Place Year Law timeline
# <int> <fct> <int> <int> <dbl>
#1 1 A 1990 0 -1.
#2 2 A 1991 1 0.
#3 3 A 1992 1 1.
#4 4 B 1990 0 -2.
#5 5 B 1991 0 -1.
#6 6 B 1992 1 0.
#7 7 B 1993 1 1.

关于r - 根据 R 中的事件创建条件时间线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50123773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com