我有以下数据框,
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()
无济于事。非常感谢任何帮助。
答案 0 :(得分:5)
尝试仅对列进行排序(即[
的第二个参数):
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
只返回相对于正在排序的内容的indeces,在这种情况下缺少第一列,所以我们必须抵消所有内容回来一个