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

Fra*_*nky 13 diff group-by r dplyr

假设我有这个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
Run Code Online (Sandbox Code Playgroud)

使用dplyr我可以按ID对它们进行分组,并过滤​​出现多次出现的ID

data <- data %>% group_by(ID) %>% filter(n() > 1)
Run Code Online (Sandbox Code Playgroud)

现在,我想要实现的是添加一个列:差异=期间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
Run Code Online (Sandbox Code Playgroud)

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

ale*_*emm 26

这是另一种解决方案lag.根据使用情况,它可能比diff因为NAs清楚地显示特定值没有前任而更方便,而0使用diff可能是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
Run Code Online (Sandbox Code Playgroud)