在下面的数据中,我们观察到一个国家的指数化GDP率随时间的推移。我的目标是创建一个二进制变量: 0=无危机,1=危机。如果该指数低于过去5年的平均值,则该变量被编码为1=crisis,直到它回到最初的5年平均值。
在下面的例子中,1990至1994年间的国内生产总值平均数是98。1995年,国内生产总值为96,因此这一变量被编码为1,直到1999年上升到99 (超过98)。这种情况在2002年至2005年期间再次发生,直到国内生产总值水平回到1997年至2001年101.6的5年平均水平。谁能帮个忙吗?
GDP year Expected output
100 1990 0
99 1991 0
98 1992 0
97 1993 0
98 1994 0
96 1995 1
94 1996 1
95 1997 1
97 1998 1
99 1999 0
110 2000 0
107 2001 0
100 2002 1
98 2003 1
99 2004 1
97 2005 1
102 2006 0
103 2007 0
102 2008 0以下是数据:
df= structure(list(`Index 100` = c(100, 99, 98, 97, 98, 96, 94, 95,
97, 99, 110, 107, 100, 98, 99, 97, 102, 103, 102), year = c(1990,
1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
2002, 2003, 2004, 2005, 2006, 2007, 2008), `Expected output` = c(0,
0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0)), row.names = c(NA,
-19L), class = "data.frame")发布于 2022-07-12 09:49:15
尝尝这个
library(dplyr)
df |> mutate(crisis = case_when(lag(c( rep(0 , 4),
zoo::rollmean(df$GDP , 5)),1)> GDP ~ 1 , TRUE ~ 0)) GDP year crisis
1 100 1990 0
2 99 1991 0
3 98 1992 0
4 97 1993 0
5 98 1994 0
6 96 1995 1
7 94 1996 1
8 95 1997 1
9 97 1998 0
10 99 1999 0
11 110 2000 0
12 107 2001 0
13 100 2002 1
14 98 2003 1
15 99 2004 1
16 97 2005 1
17 102 2006 0
18 103 2007 0
19 102 2008 0 GDP year crisis Five_years_avg
1 100 1990 0 NA
2 99 1991 0 0.0
3 98 1992 0 0.0
4 97 1993 0 0.0
5 98 1994 0 0.0
6 96 1995 1 98.4
7 94 1996 1 97.6
8 95 1997 1 96.6
9 97 1998 0 96.0
10 99 1999 0 96.0
11 110 2000 0 96.2
12 107 2001 0 99.0
13 100 2002 1 101.6
14 98 2003 1 102.6
15 99 2004 1 102.8
16 97 2005 1 102.8
17 102 2006 0 100.2
18 103 2007 0 99.2
19 102 2008 0 99.81998年国内生产总值为97,而过去5年的平均数为96年,因此没有危机。
https://stackoverflow.com/questions/72949868
复制相似问题