R语言 按组计算数据框架行之间的差异
在这篇文章中,我们将看到如何在R编程语言中通过数据框架中的组找到行之间的差异。
方法1:使用dplyr包
group_by方法是用来根据特定列中包含的组来划分和隔离日期的。需要分组的列被指定为这个函数的参数。它可以包含多个列名。
语法
group_by(col1, col2, …)
接下来是应用mutate()方法,用于转移方向和对数据进行操作。可以使用新的列名来指定新的列名。与前一行的差异可以用这个库的lag()方法来计算。这个方法可以找到一个向量中的前一个值。
语法
lag(x, n = 1L, default = NA)
参数
- x – 一个值的向量
- n – 要滞后的位置数
- default (默认:NA)–用于不存在的行的值。
通过使用从指定列的特定行中减去的列值的滞后,在数据框中引入一个突变。默认值是使用first(col-name)的该特定组的第一个值。
例子
# installing required libraries
library("dplyr")
# creating a data frame
data_frame <- data.frame(col1 = sample(6:9, 9 , replace = TRUE),
col2 = letters[1:3],
col3 = c(1,4,5,1,NA,NA,2,NA,2))
print ("Original DataFrame")
print (data_frame)
print ("Modified DataFrame")
# computing difference of each group
data_frame%>%group_by(col1)%>%mutate(diff=col3-lag(
col3,default=first(col3)))
输出
[1] "Original DataFrame"
col1 col2 col3
1 6 a 1
2 9 b 4
3 7 c 5
4 6 a 1
5 6 b NA
6 9 c NA
7 6 a 2
8 8 b NA
9 7 c 2
[1] "Modified DataFrame"
# A tibble: 9 x 4
# Groups: col1 [4]
col1 col2 col3 diff
<int> <chr> <dbl> <dbl>
1 6 a 1 0
2 9 b 4 0
3 7 c 5 0
4 6 a 1 0
5 6 b NA NA
6 9 c NA NA
7 6 a 2 NA
8 8 b NA NA
9 7 c 2 -3
方法2:使用data.table包
数据框架索引方法可以用来计算R中按组划分的行的差异。所有的行被保留下来,同时在列的集合中添加一个新的列,使用该列来计算按组的行的差异。差值的计算方法是使用指定列的特定行,并从其中减去使用shift()方法计算的前一个值。shift方法是用来滞后向量或列表的。
语法
data_frame[ , new-col-name := reqd-col - shift(reqd-col), by = grouping-col]
在该特定列中,该特定组的第一个实例被替换为NA。
例子
# installing required libraries
library("data.table")
# creating a data frame
data_frame <- data.table(col1 = sample(6:9, 9 , replace = TRUE),
col2 = letters[1:3],
col3 = c(1,4,5,1,9,11,2,7,2))
print ("Original DataFrame")
print (data_frame)
# computing difference of each group
data_frame[ , diff := col3 - shift(col3), by = col1]
print ("Modified DataFrame")
print (data_frame)
输出
[1] "Original DataFrame"
col1 col2 col3
1: 8 a 1
2: 8 b 4
3: 7 c 5
4: 6 a 1
5: 6 b 9
6: 8 c 11
7: 8 a 2
8: 9 b 7
9: 7 c 2
[1] "Modified DataFrame"
col1 col2 col3 diff
1: 8 a 1 NA
2: 8 b 4 3
3: 7 c 5 NA
4: 6 a 1 NA
5: 6 b 9 8
6: 8 c 11 7
7: 8 a 2 -9
8: 9 b 7 NA
9: 7 c 2 -3
方法3:使用ave()方法
基准R中的ave()方法是用来对因素的水平组合进行平均分组。
语法
ave(x, group , FUN = mean)
参数:
- x – 所需的数据框架列
- group – 分组的变量
- FUN – 对每个因子水平组合要应用的函数。
这里的函数是计算该行中某一列的差值和前一行与它的差值。在该特定列中,该特定组的第一个实例被替换为NA。
例子
# creating a data frame
data_frame <- data.frame(col1 = sample(6:9, 9 , replace = TRUE),
col2 = letters[1:3],
col3 = c(1,4,5,1,9,11,2,7,2))
print ("Original DataFrame")
print (data_frame)
# computing difference of each group
data_framediff <- ave(data_framecol3, factor(data_frame$col1),
FUN=function(x) c(NA,diff(x)))
print ("Modified DataFrame")
print (data_frame)
输出
[1] "Original DataFrame"
col1 col2 col3
1 9 a 1
2 9 b 4
3 6 c 5
4 7 a 1
5 6 b 9
6 7 c 11
7 9 a 2
8 9 b 7
9 9 c 2
[1] "Modified DataFrame"
col1 col2 col3 diff
1 9 a 1 NA
2 9 b 4 3
3 6 c 5 NA
4 7 a 1 NA
5 6 b 9 4
6 7 c 11 10
7 9 a 2 -2
8 9 b 7 5
9 9 c 2 -5