R语言 在数据框架中按组创建滞后变量

R语言 在数据框架中按组创建滞后变量

滞后变量是一种变量类型,它包含了我们想要创建滞后变量的变量的前一个值,第一个值被忽略了。在R编程语言中,数据可以根据不同的组进行分离,然后对这些类别进行不同的处理。

方法1:使用dplyr包

R语言中的 “dplyr “包用于执行数据增强和操作,并可以加载到工作空间。

R语言中的group_by()方法可用于根据单列或多列组将数据归类为组。所有输入列的合理的唯一组合被堆叠在一起作为一个单一的组。

语法

group_by(args …)。

其中,args包含一串要分组数据的列。

接下来是在数据框上应用mutate()方法,用来模拟数据框列的创建、删除和修改。mutate()方法添加新的变量,同时也保留现有的变量。mutate方法以lag()方法为参数,对数据进行转换。lag()方法用于诱导指定变量的滞后值。

语法:

lag(col, n = 1L, default = NA)

参数:

  • col – 数据框架中要引入滞后值的列。
  • n – (默认:1) 引导或滞后的位置数
  • default – (默认值:NA)用于不存在的行的值。

在lag()输入列的属性中,变量出现的第一个实例被替换为NA。所有连续出现的实例由之前分配给同一组的值替换。

这些方法的结果是以tibble的形式出现的,它是一个类似于表格的结构,并且会返回关于组数和列类的适当信息。

例1 :

library("dplyr")
 
# creating a data frame
data_frame <- data.frame(col1 = rep(c(1:3), each = 3),
                         col2 = letters[1:3]
                         )
 
print ("Original DataFrame")
print (data_frame)
 
data_mod <- data_frame %>%                           
  group_by(col1) %>%
  dplyr::mutate(laggedval = lag(col2, n = 1, default = NA))
 
print ("Modified Data")
print (data_mod)

输出

[1] "Original DataFrame" 
col1 col2 
1    1    a 
2    1    b
3    1    c 
4    2    a 
5    2    b 
6    2    c 
7    3    a 
8    3    b 
9    3    c 
[1] "Modified Data" 
# A tibble: 9 x 3 
# Groups:   col1 [3]    
col1 col2  laggedval   
<int> <fct> <fct>     
1     1 a     NA        
2     1 b     a         
3     1 c     b         
4     2 a     NA        
5     2 b     a         
6     2 c     b         
7     3 a     NA        
8     3 b     a         
9     3 c     b   

分组可以基于多个列进行,其中创建的组取决于所有相关列的组合中可能创建的不同的唯一集。

例2 :

library("tidyverse")
 
# creating a data frame
data_frame <- data.frame(col1 = rep(c(1:3), each = 3),
                         col2 = letters[1:3],
                         col3 = c(1,4,1,2,2,2,1,2,2))
 
print ("Original DataFrame")
print (data_frame)
 
print ("Modified DataFrame")
data_mod <- data_frame %>%                           
  group_by(col1,col3) %>%
  dplyr::mutate(laggedval = lag(col2, n = 1, default = NA))
 
print ("Modified Data")
print (data_mod)

输出

[1] "Original DataFrame" 
   col1 col2 col3 
1    1    a    1 
2    1    b    4 
3    1    c    1 
4    2    a    2 
5    2    b    2 
6    2    c    2 
7    3    a    1 
8    3    b    2 
9    3    c    2 
[1] "Modified DataFrame" 
[1] "Modified Data" 
# A tibble: 9 x 4 
# Groups:   col1, col3 [5]    
col1 col2   col3 laggedval   
  <int> <fct> <dbl> <fct>     
1     1 a         1 NA        
2     1 b         4 NA        
3     1 c         1 a         
4     2 a         2 NA        
5     2 b         2 a         
6     2 c         2 b         
7     3 a         1 NA        
8     3 b         2 NA        
9     3 c         2 b  

方法2:使用diplicated()

最初,使用R语言中的nrow()方法获取数据框的行数。随后,从列中提取数值,在排除最后一行的数值时引入滞后值。这将返回一个缺失值的向量(最后一行的诱导值),然后是按所需列顺序排列的行值。

然后,每个组出现的第一个实例被重复()方法识别,并使用which()方法被NA替换。这些值的修改被存储在分配给数据框架的新列名中。

例子

# creating a data frame
data_frame <- data.frame(col1 = rep(c(1:3), each = 3),
                         col2 = letters[1:3]
                         )
 
print ("Original DataFrame")
print (data_frame)
 
# getting the last row col index
last_row <- -nrow(data_frame)
excl_last_row <- as.character(data_framecol2[last_row])
 
# create a vector of values of NA and col2 
data_framelag_value <- c( NA, excl_last_row)
 
# replace first occurrence by NA
data_framelag_value[which(!duplicated(data_framecol1))] <- NA
print ("Modified Data")
print (data_frame)  

输出

[1] "Original DataFrame" 
   col1 col2 
1    1    a 
2    1    b 
3    1    c 
4    2    a 
5    2    b 
6    2    c 
7    3    a 
8    3    b 
9    3    c 
[1] "Modified Data" 
  col1 col2 lag_value 
1    1    a      <NA> 
2    1    b         a 
3    1    c         b 
4    2    a      <NA> 
5    2    b         a 
6    2    c         b 
7    3    a      <NA> 
8    3    b         a 
9    3    c         b

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程