R语言 按组计算数据框架行之间的差异

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)))
R

输出

[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
R

方法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)
R

输出

[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
R

方法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)
R

输出

[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
R

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册