假设我有这个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中实现此目的。
感谢您的帮助或指导。
答案 0 :(得分:25)
以下是使用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