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

组内的diff操作,在dplyr::group_by()之后,r,group-by,diff,dplyr,R,Group By,Diff,Dplyr,假设我有这个data.frame(有3个变量) 使用dplyr,我可以按ID对它们进行分组,并过滤出现多次的ID data <- data %>% group_by(ID) %>% filter(n() > 1) 在电子表格中这样做很简单,但我不知道如何在R中实现这一点。 谢谢你的帮助和指导 这里是另一个使用lag的解决方案。根据用例的不同,它可能比diff更方便,因为NAs清楚地显示特定值没有前置值,而0使用diff可能是a)缺少前置值或b)两个时段之间的减法的结果

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

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

data <- data %>% group_by(ID) %>% filter(n() > 1)
在电子表格中这样做很简单,但我不知道如何在R中实现这一点。

谢谢你的帮助和指导

这里是另一个使用
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

谢谢你,亚历克斯。我也很喜欢这个。因此,是的,我同意最好在第一个时段使用NA,并且只有当差值为0时才使用0。您还可以在
lag
中指定默认值,例如
Score-lag(Score,default=99)
以及要使用的滞后。
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
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