首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建一个列,该列依赖于具有一定阈值的多个事件?

如何创建一个列,该列依赖于具有一定阈值的多个事件?
EN

Stack Overflow用户
提问于 2022-07-12 09:16:03
回答 1查看 60关注 0票数 0

在下面的数据中,我们观察到一个国家的指数化GDP率随时间的推移。我的目标是创建一个二进制变量: 0=无危机,1=危机。如果该指数低于过去5年的平均值,则该变量被编码为1=crisis,直到它回到最初的5年平均值。

在下面的例子中,1990至1994年间的国内生产总值平均数是98。1995年,国内生产总值为96,因此这一变量被编码为1,直到1999年上升到99 (超过98)。这种情况在2002年至2005年期间再次发生,直到国内生产总值水平回到1997年至2001年101.6的5年平均水平。谁能帮个忙吗?

代码语言:javascript
复制
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

以下是数据:

代码语言:javascript
复制
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")
EN

回答 1

Stack Overflow用户

发布于 2022-07-12 09:49:15

尝尝这个

代码语言:javascript
复制
library(dplyr)

df |> mutate(crisis = case_when(lag(c( rep(0 , 4),
zoo::rollmean(df$GDP , 5)),1)> GDP ~ 1 , TRUE ~ 0))
  • 输出
代码语言:javascript
复制
   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
  • 输出以提高对解决方案的理解
代码语言:javascript
复制
   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.8

1998年国内生产总值为97,而过去5年的平均数为96年,因此没有危机。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72949868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档