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[...]
调用)运算符,如 .I
和 id
从第二个 school[...]
调用中。
P.D.: 我会接受更好标题的建议。谢谢!
我们可以使用 duplicated
获取每个 id
和 year
重复的成绩的逻辑值。
library(data.table)
school[, repetition := duplicated(grade, incomparables = NA), .(id, year)]
所以我有一所学校的大量学生数据集,如下所示:
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[...]
调用)运算符,如 .I
和 id
从第二个 school[...]
调用中。
P.D.: 我会接受更好标题的建议。谢谢!
我们可以使用 duplicated
获取每个 id
和 year
重复的成绩的逻辑值。
library(data.table)
school[, repetition := duplicated(grade, incomparables = NA), .(id, year)]