【问题标题】:Nested Individual-time conditions on panel data in RR中面板数据的嵌套个体时间条件
【发布时间】: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[...] 调用)运算符,如 .Iid

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

【问题讨论】:

  • 请使用set.seed 生成数据集并显示给定示例的预期输出。
  • 我已经更新了代码。
  • 您的问题中没有预期的输出。您可以将其分享给几个 id
  • 更新肯定需要一些时间,我创建了一个带有所需输出的下载链接以节省空间。感谢您的关注。

标签: r database dplyr data.table longitudinal


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答。这是我所问问题的解决方案,因此我将其标记为正确答案。但是,我一直在寻找一个更通用的解决方案,让我对数据有更大的灵活性。特别是,我希望能够拥有学生每年看到的所有过去和未来成绩的向量,这就是我要求嵌套条件的原因。我会在下一篇文章中尝试更准确。
  • 也许你可以把它当作一个新问题来问。
猜你喜欢
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 2016-06-04
相关资源
最近更新 更多