如何在R数据帧中按组找到每行的值与上一行的差?

在数据分析中,有时我们需要找到当前值与先前值之间的差异,并且组也可能需要它。它有助于我们比较这些值之间的差异。在R中,我们可以将dplyr包的group_by和mutate函数与lag一起使用。

示例

请看以下数据帧-

> x<-rep(c("S1","S2","S3","S4","S5"),times=4)
> y<-rnorm(20)
> df2<-data.frame(x,y)
> df2

输出结果

   x    y
1 S1 -0.2648554
2 S2 -1.6024447
3 S3 -0.3668267
4 S4 0.6439787
5 S5 1.9406125
6 S1 1.8398485
7 S2 1.5151748
8 S3 -0.7975164
9 S4 -1.4744469
10 S5 -0.4300237
11 S1 -1.2181901
12 S2 -0.9504064
13 S3 1.0594684
14 S4 -0.3190330
15 S5 -0.4186285
16 S1 0.2418591
17 S2 0.4273363
18 S3 1.2725779
19 S4 0.1008520
20 S5 0.0362863
> df2%>%group_by(x)%>%mutate(Difference=y-lag(y,default=first(y)))
# A tibble: 20 x 3
# Groups: x [5]

输出结果

   x       y    Difference
<fct>    <dbl>    <dbl>
1 S1    -0.265       0
2 S2    -1.60       0
3 S3    -0.367       0
4 S4    0.644       0
5 S5    1.94       0
6 S1    1.84       2.10
7 S2    1.52       3.12
8 S3    -0.798    -0.431
9 S4    -1.47    -2.12
10 S5    -0.430    -2.37
11 S1    -1.22    -3.06
12 S2    -0.950    -2.47
13 S3    1.06       1.86
14 S4    -0.319    1.16
15 S5    -0.419    0.0114
16 S1    0.242    1.46
17 S2    0.427    1.38
18 S3    1.27    0.213
19 S4    0.101    0.420
20 S5    0.0363    0.455