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))

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

此示例所需的输出可以在此处找到(我设置了一个链接以节省空间(。

这听起来可能很简单,但事实并非如此,因为学生可以回到年级,或者在前几年缺席。 我想要一种使用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)]

但是,这不起作用,因为我不知道如何区分"上层"(来自第一个school[...]调用(运算符,如.Iid从第二个school[...]调用内部。

PD:我会接受更好的标题的建议。谢谢!

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

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

最新更新