组内的diff操作,在dplyr::group_by()之后
假设我有这个data.frame(有3个变量) 使用dplyr,我可以按ID对它们进行分组,并过滤出现多次的ID组内的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 <- 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