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

我有一个纵向数据集,我想在其中创建一个列来指示过去两年中某个人是否发生过事件 (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
#  ...

https://stackoverflow.com/questions/71737356/

相关文章:

java - 如何在 Java 中创建包含运算符的变量?

ios - 在 SwiftUI 中声明 Binding 属性有什么区别?

c# - System.IO.Directory.Exists 在 LINQ 语句中失败,但在 fo

linux - bash 将奇数日期格式转换为 linux 日期识别的更有效方法

c - 为什么静态链接的 "hello world"程序这么大(超过 650 KB)?

python - `__ge__` 在 dict.values() 上使用时失败

go - 函数参数的求值顺序是什么?

sql - 如何使用 group by 检索不同的数据

javascript - 根据条件在嵌套的 JS 数组中插入新的 JSON 对象

c# - C# 中的 StringBuilder 与 Span