在R中为任意变量(即不是常规时间序列)制作滞后变量矩阵的最有效方法是什么?
例如:
输入:
x <- c(1,2,3,4)
Run Code Online (Sandbox Code Playgroud)
2滞后,输出:
[1,NA, NA]
[2, 1, NA]
[3, 2, 1]
[4, 3, 2]
Run Code Online (Sandbox Code Playgroud) 我在处理R中的时间序列时遇到问题
#--------------read data
wb = loadWorkbook("Countries_Europe_Prices.xlsx")
df = readWorksheet(wb, sheet="Sheet2")
x <- df$Year
y <- df$Index1
y <- lag(y, 1, na.pad = TRUE)
cbind(x, y)
Run Code Online (Sandbox Code Playgroud)
它给了我以下输出:
x y
[1,] 1974 NA
[2,] 1975 50.8
[3,] 1976 51.9
[4,] 1977 54.8
[5,] 1978 58.8
[6,] 1979 64.0
[7,] 1980 68.8
[8,] 1981 73.6
[9,] 1982 74.3
[10,] 1983 74.5
[11,] 1984 72.9
[12,] 1985 72.1
[13,] 1986 72.3
[14,] 1987 71.7
[15,] 1988 72.9
[16,] 1989 75.3
[17,] 1990 81.2
[18,] …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个类似于R的函数lag1,lag2并retain在SAS中使用我可以与data.tables一起使用的函数.
我知道R中有类似的功能embed,lag但它们不会返回单个值或前一个值.它们返回一组完整的向量.
R中有什么东西我可以用data.table吗?
有关SAS功能的更多信息:
我有一个带有列t的数据帧.我想创建n个滞后列,其名称如t-1,t-2等.
year t t-1 t-2
19620101 1 NA NA
19630102 2 1 NA
19640103 3 2 1
19650104 4 3 2
19650104 5 4 3
19650104 6 5 4
Run Code Online (Sandbox Code Playgroud)
我的想法是,我将分四步完成:
但我无法继续执行代码.粗糙的东西:
df_final<-lagged(df="odd",n=3)
lagged<-function(df,n){
df<-zoo(df)
lags<-paste("A", 1:n, sep ="_")
for (i in 1:5) {
odd<-as.data.frame(lag(odd$OBS_Q,-1*i,na.pad = TRUE))
#Cbind here
}
Run Code Online (Sandbox Code Playgroud)
我坚持写这个功能.你能表现出来吗?或者另外一种更简单的方法....
附录:
真实数据:
x<-structure(list(DATE = 19630101:19630104, PRECIP = c(0, 0, 0,0),
OBS_Q = c(1.61, 1.48, 1.4, 1.33), swb = c(1.75, 1.73, 1.7,1.67),
gr4j = c(1.9, …Run Code Online (Sandbox Code Playgroud)