在 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
清楚地表明特定值没有前导值,而使用 diff
的 0
可能是结果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
假设我有这个 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
清楚地表明特定值没有前导值,而使用 diff
的 0
可能是结果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