R 中面板数据的嵌套 Individual-time 条件

Nested Individual-time conditions on panel data in R

所以我有一所学校的大量学生数据集,如下所示:

library(data.table)
set.seed(1)
school <- data.table("id" = rep(1:10, each = 10), "year" = rep(2000:2009, each = 10),
 "grade" = sample(c(9:11, rep(NA, 5)), 100, replace = T))

我想做的是创建一个列,指示学生以前是否与他现在在同一年级。

可以找到此示例所需的输出 here(我创建了一个 link 来保存 space)。

这听起来可能很简单,但事实并非如此,因为学生的成绩可能会倒退,或者前几年缺席。 我想要一种使用 data.table 来执行此操作的方法,因为数据集非常大。到目前为止,我已经尝试了以下方法:

library(dplyr)
library(scales)
school[, repetition := any(school[censor((.I - 10):(.I + 10),
                                         range = c(0, NROW(school))) %>% na.omit
       ][school[.I, id] == id] == grade)]

但是,这不起作用,因为我不知道如何区分 "upper level"(与第一个 school[...] 调用)运算符,如 .Iid从第二个 school[...] 调用中。

P.D.: 我会接受更好标题的建议。谢谢!

我们可以使用 duplicated 获取每个 idyear 重复的成绩的逻辑值。

library(data.table)
school[, repetition := duplicated(grade, incomparables = NA), .(id, year)]