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


在数据分析中,有时我们需要找出当前值与前一个值之间的差值,而且可能也需要分组找出。它有助于我们比较值之间的差异。在 R 中,我们可以使用 dplyr 包的 group_by 和 mutate 函数与滞后一起使用。

示例

考虑一下下面的数据帧 −

 实时演示

> Group<-rep(LETTERS[1:5],each=4)
> Frequency<-sample(1:20,20,replace=TRUE)
> df1<-data.frame(Group,Frequency)
> df1

输出

 Group Frequency
1 A    7
2 A    6
3 A    9
4 A    12
5 B    19
6 B    19
7 B    4
8 B    6
9 C    14
10 C    6
11 C    6
12 C    20
13 D    2
14 D    11
15 D    14
16 D    19
17 E    14
18 E    7
19 E    3
20 E    1

加载 dplyr 包 −

> library(dplyr)

按组从每行减去频率 −

> df1%>%group_by(Group)%>%mutate(Difference=Frequencylag(Frequency,default=first(Frequency)))
# A tibble: 20 x 3
# Groups: Group [5]

输出

Group Frequency Difference
<fct> <int> <int>
1 A    7    0
2 A    6    -1
3 A    9    3
4 A    12    3
5 B    19    0
6 B    19    0
7 B    4    -15
8 B    6    2
9 C    14    0
10 C    6    -8
11 C    6    0
12 C    20    14
13 D    2    0
14 D    11    9
15 D    14    3
16 D    19    5
17 E    14    0
18 E    7    -7
19 E    3    -4
20 E    1    -2

让我们看另一个示例 −

示例

 实时演示

> 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

更新时间: 2020 年 9 月 4 日

1K+ 查看

启动您的 职业生涯

完成课程以取得认证

开始
广告