在R的特殊情况下,将数据帧中的列堆叠在一起=“变量滞后”?

时间:2016-11-13 22:27:23

标签: r dataframe grouping lag

(给出了可重现的例子)如何在列=“变量滞后”的特殊情况下将数据帧中的列堆叠在一起?

library(vars)
decy <- function(x, k=2) {format(round(x, k), nsmall=k)} # decimal number fixer
set.seed(1)
df <- data.frame(replicate(4, rnorm(100)))
coeflist <- coef(VAR(df, p=6, type="none"))
out <- as.data.frame(matrix(as.numeric(decy(matrix(c(coeflist[[1]][,1], coeflist[[2]][,1], coeflist[[3]][,1], coeflist[[4]][,1]), nrow=4, byrow=TRUE),3)), nrow=4))
rownames(out) <- colnames(df)
names(out) <- c(paste(rep(colnames(df), 1), rep(1:6, each = 4),"l", sep=""))
out

产生

    X11l   X21l   X31l  X41l   X12l   X22l   X32l   X42l   X13l   X23l   X33l
X1 0.029 -0.138 -0.160 0.110 -0.023  0.013 -0.080 -0.068 -0.090 -0.051  0.185
X2 0.088 -0.062 -0.117 0.017  0.065  0.009  0.165 -0.120 -0.053  0.056 -0.054
X3 0.069  0.212 -0.158 0.076 -0.135 -0.003  0.026 -0.127  0.159  0.201 -0.058
X4 0.001  0.078  0.064 0.119 -0.190 -0.013  0.128 -0.059  0.155  0.145 -0.184
     X43l   X14l   X24l  X34l   X44l   X15l   X25l   X35l   X45l   X16l   X26l
X1 -0.052 -0.100  0.035 0.007  0.050 -0.045  0.011  0.289  0.084 -0.071 -0.218
X2 -0.120  0.105  0.071 0.140  0.015  0.038  0.218  0.081 -0.036 -0.141  0.069
X3  0.088  0.180  0.040 0.007  0.164  0.122 -0.025 -0.111 -0.030  0.028 -0.271
X4  0.064 -0.072 -0.046 0.059 -0.089  0.006  0.001 -0.102 -0.020 -0.109  0.079
     X36l   X46l
X1  0.029 -0.006
X2  0.141  0.012
X3 -0.092 -0.075
X4 -0.039 -0.023

其中X1,...,X4是变量,X35l表示X3的第5个滞后。我想把变量的滞后堆叠在一起:

    X11l X12l ...X16l X21l X22l ...X26l...  X41l X42l ... X46l
X1  0.029 -0.023
X2  0.088 0.065
X3  0.069 -0.135
X4  0.001 -0.190

在SOF中有一个类似的问题(Gather multiple groups of columns in R),但我无法弄清楚如何从那里完成。

1 个答案:

答案 0 :(得分:0)

来自解决方案:
1。

out[,c(1,5,9,13,17,21, 2,6,10,14,18,22, 3,7,11,15,19,23, 4,8,12,16,20,24)]

<强> 2

out[,c(seq(1,21,by=4), seq(2,22,by=4), seq(3,23,by=4), seq(4,24,by=4))]

我最终获得了可接受的(对我而言)解决方案:

第3

out[,unlist(lapply(1:4, function(x){seq(x, 24, by = 4)}))]