R语言-生成滞后数据,滞后阶数自己设定

rm(list = ls())
#首先读取数据
data1<-read.csv("原始数据.csv",header=T,stringsAsFactors=F)#读入数据


#如果是xlsx格式数据可以调用xlsx包,读取方法如下

#library(xlsxjars)
#library(rJava)
#library(xlsx)
#data1<-read.xlsx("原始数据.xlsx",header=T,sheetIndex=1)#读入数据

n1=4 #滞后期数,自己定义
col_name<-colnames(data1)[-1] #因为第一列是日期,所以删除第一列


#假如要生成滞后4期数据,我的做法是将每阶滞后数据按列依次排列,如:原数据是gdp,则得到的数据为gdp,gdp(-1),...,gdp(-4)
if(n1>(nrow(data1)-1)) print("请输入正确的滞后期数") else{ #首先肯定是判断滞后阶数是否合理
  data5<-c()
  for(i in 1:n1){
    data3<-data1[-c(1:i),] 
    data4<-data1[-c((nrow(data1)-i+1):nrow(data1)),] #滞后i期数据
    data4<-data4[,-1] #第一列是日期数据,只需要data3有日期就行了(即整个数据只要第一列是日期就行了)
    colnames(data4)<-paste(col_name,"(-",i,")") #给滞后变量命名
    if(i==1){
      for(j in 1:ncol(data1))
        data5<-cbind(data5,data3[,j],data4[,j]) 
    }
    if(i>1){
      data5<-data5[-1,]
      for(j in 1:ncol(data1)) data5<-cbind(data5,data4[,j])
    }
  }
}

 

 

#之所以写此博客是因为当时想了好久才想出来怎么按顺序依次排列,希望能帮助那些需要求滞后数据的同学,毕竟lag是真心不好用,有时候R中的函数不一定都很适用,还不如自己写一个,很锻炼思维的。

 

 

#该程序可以对数据框(矩阵当然也行)每列数据批量求滞后项,个人觉得很适用,应该对初学时间序列的同学有帮助,有好想法也欢迎贴上来,大家一起学习一起进步!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(R语言)