按日期功能排序数据框列
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 相对于所订购内容的索引,在本例中缺少第一列,所以我们必须将所有内容抵消一个
我有以下数据框,
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 相对于所订购内容的索引,在本例中缺少第一列,所以我们必须将所有内容抵消一个