假设我有这个 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
清楚地表明特定值没有前驱,而使用 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
Diff 也适合于此。 diff之前必须有另一个group_by。
data <- data %>% group_by(ID) %>%
filter(n() > 1) %>%
group_by(ID) %>%
mutate(Difference = c(NA, diff(Score)))