在 dplyr::group_by() 之后,组内的 diff 操作

diff operation within a group, after a dplyr::group_by()

假设我有这个 data.frame(有 3 个变量)

ID  Period  Score
123 2013    146
123 2014    133
23  2013    150
456 2013    205
456 2014    219
456 2015    140
78  2012    192
78  2013    199
78  2014    133
78  2015    170

使用 dplyr 我可以按 ID 对它们进行分组并过滤这些出现不止一次的 ID

data <- data %>% group_by(ID) %>% filter(n() > 1)

现在,我想要实现的是添加一列: 差值 = P 期分数 - P-1 期分数 得到这样的东西:

ID  Period  Score   Difference
123 2013    146 
123 2014    133 -13
456 2013    205 
456 2014    219 14
456 2015    140 -79
78  2012    192 
78  2013    199 7
78  2014    133 -66
78  2015    170 37

在电子表格中执行此操作相当简单,但我不知道如何在 R 中实现此操作。
感谢您的帮助或指导。

这是另一个使用 lag 的解决方案。根据用例,它可能比 diff 更方便,因为 NAs 清楚地表明特定值没有前导值,而使用 diff0 可能是结果a) 缺少前任或 b) 两个期间之间的减法。

data %>% group_by(ID) %>% filter(n() > 1) %>%
  mutate(
    Difference = Score - lag(Score)
    )

#   ID Period Score Difference
# 1 123   2013   146         NA
# 2 123   2014   133        -13
# 3 456   2013   205         NA
# 4 456   2014   219         14
# 5 456   2015   140        -79
# 6  78   2012   192         NA
# 7  78   2013   199          7
# 8  78   2014   133        -66
# 9  78   2015   170         37