如何在 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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言
C++
C#
MongoDB
MySQL
Javascript
PHP