【发布时间】:2020-06-13 00:07:55
【问题描述】:
所以我有一所学校的大量学生数据集如下所示:
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 找到此示例所需的输出(我创建了一个链接以节省空间)。
这听起来可能很简单,但事实并非如此,因为学生可以重新上学,或者在前几年缺课。
我想要一种使用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[...] 调用中区分“上层”(来自第一个 school[...] 调用)运算符,如 .I 和 id。
P.D.:我会接受关于更好标题的建议。谢谢!
【问题讨论】:
-
请使用
set.seed生成数据集并显示给定示例的预期输出。 -
我已经更新了代码。
-
您的问题中没有预期的输出。您可以将其分享给几个 id
-
更新肯定需要一些时间,我创建了一个带有所需输出的下载链接以节省空间。感谢您的关注。
标签: r database dplyr data.table longitudinal