对列进行排序并整形为一行对象

时间:2018-10-16 09:50:50

标签: r reshape2

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

        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        ...

1 个答案:

答案 0 :(得分:0)

您需要做的是对每一列进行排序(以降序排列)并生成列名。

生成虚拟数据:

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