对列进行排序并重塑为一行对象

Sort columns and reshape into one row object

我的数据框中有一些时间序列变量

        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

我想把它整成一条线

     var1 (lag0), var1 (lag1), var1 (lag2), ... , var2 (lag0) , var2 (lag1) ...
[1,]      28        27            26        ...       6            5        ...

您只需对每一列进行排序(按降序排列)并生成列名。

生成虚拟数据:

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

将原始数据重塑为一行矩阵:

result <- matrix(apply(data, 2, sort, TRUE), 1)

添加列名:

colnames(result) <- as.vector(sapply(colnames(data), paste0, " (lag", 0:(nrow(data) - 1), ")"))

最终结果(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