如何在 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