I have some time series variable in my dataframe
var1 var2 var3
[1,] 23 1 10
[2,] 24 2 11
[3,] 25 3 12
[4,] 26 4 13
[5,] 27 5 14
[6,] 28 6 15
I would like to reshape it all in a line
var1 (lag0), var1 (lag1), var1 (lag2), ... , var2 (lag0) , var2 (lag1) ...
[1,] 28 27 26 ... 6 5 ...
All you need is to sort every column (in decreasing order) and generate column names.
Generate dummy data:
data <- matrix(sample(1:18), 6)
colnames(data) <- paste0("var", 1:3)
var1 var2 var3
[1,] 6 18 14
[2,] 17 12 7
[3,] 15 1 16
[4,] 13 5 3
[5,] 10 8 2
[6,] 4 11 9
Reshape original data into one row matrix:
result <- matrix(apply(data, 2, sort, TRUE), 1)
Add column names:
colnames(result) <- as.vector(sapply(colnames(data), paste0, " (lag", 0:(nrow(data) - 1), ")"))
Final result (result[, 1:10]
):
var1 (lag0) var1 (lag1) var1 (lag2) var1 (lag3) var1 (lag4) var1 (lag5) var2 (lag0) var2 (lag1) var2 (lag2) var2 (lag3)
18 15 10 9 6 5 16 14 12 8