按日期功能排序数据框列

Functionally order data frame columns by date

我有以下数据框,

ESIVmatrix <- structure(c(1000, 1050, 1100, 1150, 1200, 1250, 0.596044633067339, 
0.568874415146119, 0.548817842630467, 0.528509198265979, 0.505102479305053, 
0.481863859161313, 0.419829588814411, 0.407383853187116, 0.395662104352744, 
0.383710399971056, 0.371402827197033, 0.358943850461579, 0.390669388091009, 
0.380556007177402, 0.369862565005378, 0.358004628064117, 0.347655431619544, 
0.33661166544938, 0.474661141683071, 0.457000912081753, 0.444006689151462, 
0.429723103151982, 0.415839741238857, 0.400624512403368), .Dim = c(6L, 
5L), .Dimnames = list(NULL, c("Strikes", "20150417", "20150918", 
"20151218", "20150619")))

但是,列的顺序不是按日期顺序排列的。我希望它们按日期顺序排列(20150417、20150619、20150918、20151218)。

我试过使用 order()arrange() 都无济于事。非常感谢任何帮助。

尝试仅对列进行排序(即 [ 的第二个参数):

ESIVmatrix[, order(colnames(ESIVmatrix))]

这行得通,但最后留下 strikes 列。您可以使用稍微复杂一些的命令来解决问题:

ESIVmatrix[, c(1, order(colnames(ESIVmatrix)[-1]) + 1)]

产生:

     Strikes  20150417  20150619  20150918  20151218
[1,]    1000 0.5960446 0.4746611 0.4198296 0.3906694
[2,]    1050 0.5688744 0.4570009 0.4073839 0.3805560
[3,]    1100 0.5488178 0.4440067 0.3956621 0.3698626
[4,]    1150 0.5285092 0.4297231 0.3837104 0.3580046
[5,]    1200 0.5051025 0.4158397 0.3714028 0.3476554
[6,]    1250 0.4818639 0.4006245 0.3589439 0.3366117

我们在这里使用了一些技巧,因为我们需要第一列保持在第一位。考虑:

c(1, order(colnames(ESIVmatrix)[-1]) + 1)

这里我们说:

  • 给我们第一列:c(1, ...
  • 然后按列名对​​除第一列以外的所有列进行排序:order(colnames(ESIVmatrix)[-1])
  • 然后我们需要将 + 1 添加到最后一块,因为 order 只是 returns 相对于所订购内容的索引,在本例中缺少第一列,所以我们必须将所有内容抵消一个