【发布时间】:2018-11-24 23:44:47
【问题描述】:
我正在尝试使用 group_by 计算前几行之间的差异,并在下面的数据帧上滞后
ID DATE Value
555 1/9/2018 10
555 2/9/2018 20
555 3/9/2018 50
555 4/9/2018 70
000 1/9/2018 0
000 2/9/2018 5
000 3/9/2018 15
111 1/9/2018 0
111 2/9/2018 15
111 3/9/2018 20
111 4/9/2018 25
区别应该如下所示:
ID DATE Value Diff
555 1/9/2018 10 0
555 2/9/2018 20 10
555 3/9/2018 50 30
555 4/9/2018 70 20
000 1/9/2018 0 0
000 2/9/2018 5 5
000 3/9/2018 15 10
111 1/9/2018 0 0
111 2/9/2018 15 15
111 3/9/2018 20 5
111 4/9/2018 25 5
通过使用这行代码
data %>%
group_by(ID) %>%
arrange(DATE) %>%
mutate(Diff= Value - lag(Value, default = first(Value)))
它通过ID跳过分组条件并计算所有行之间的差异,如下所示:
ID DATE Value Diff
555 1/9/2018 10 0
555 2/9/2018 20 10
555 3/9/2018 50 30
555 4/9/2018 70 20
000 1/9/2018 0 -70
000 2/9/2018 5 5
000 3/9/2018 15 10
111 1/9/2018 0 -15
111 2/9/2018 15 15
111 3/9/2018 20 5
111 4/9/2018 25 5
【问题讨论】:
-
对我来说,您的代码工作正常,只是顺序或行不同。
-
实际上,你的代码对我来说也很好。
-
@JuliusVainora 可以串联影响 group_by 吗?因为 ID 最初是从 2 列连接的
-
@ZidaneAhmed,如果我理解正确你的意思,单独连接应该不是问题,但也许它的完成方式(例如不同操作的顺序)会产生影响。我想你应该修改你的例子。
-
您的代码运行良好。 Diff = c(0, diff(Value)) 是另一个不需要使用滞后的选项...