gpt4 book ai didi

r - 创建一个虚拟变量,指示事件是否在过去 2 年发生

转载 作者:行者123 更新时间:2023-12-05 09:28:08 26 4
gpt4 key购买 nike

我有一个纵向数据集,我想在其中创建一个列来指示过去两年中某个人是否发生过事件 (t-2)。我创建了与我的数据集共享主要特征的玩具数据(参见下面的代码)。

set.seed(123)


df <- data.frame(id = sort(rep(1:10,5)),
time = rep(2011:2015, 10),
event = rbinom(50, 1, 0.2))

head(df,10)

# Output
id time event
1 1 2011 0
2 1 2012 0
3 1 2013 0
4 1 2014 1
5 1 2015 1
6 2 2011 0
7 2 2012 0
8 2 2013 1
9 2 2014 0
10 2 2015 0

在此数据中,我想创建一个新列 occurred 以指示该事件是否在过去两年内发生。对于前 10 行,这将导致数据如下所示:

   id time event occured
1 1 2011 0 0
2 1 2012 0 0
3 1 2013 0 0
4 1 2014 1 1
5 1 2015 1 1
6 2 2011 0 0
7 2 2012 0 0
8 2 2013 1 1
9 2 2014 0 1
10 2 2015 0 1

在最理想的情况下,我希望倒退的年数成为一个可以更改的参数(即,使构造 occurred 变得相对容易,以便指示事件是否发生发生在过去 1 年或过去 4 年)。

谢谢!

最佳答案

data.table 方法

假设您的数据中没有缺失的年份。所以所有年份 2011:2015 要么是 0 要么是 1。

library(data.table)
# make it a data.table
setDT(df)
#
df[, occured := as.numeric(
frollsum(event, n = 3, align = "right", fill = event[1]) > 0),
by = .(id)]

# id time event occured
# 1: 1 2011 0 0
# 2: 1 2012 0 0
# 3: 1 2013 0 0
# 4: 1 2014 1 1
# 5: 1 2015 1 1
# 6: 2 2011 0 0
# 7: 2 2012 0 0
# 8: 2 2013 1 1
# 9: 2 2014 0 1
#10: 2 2015 0 1
#11: 3 2011 1 1
#12: 3 2012 0 1
#13: 3 2013 0 1
#14: 3 2014 0 0
#15: 3 2015 0 0
#16: 4 2011 1 1
#17: 4 2012 0 1
#18: 4 2013 0 1
#19: 4 2014 0 0
#20: 4 2015 1 1
# ...

关于r - 创建一个虚拟变量,指示事件是否在过去 2 年发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71737356/

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