2015-02-10 2 views
0

У меня есть следующий кадр данных,Функционально порядок кадров данных столбцов по дате

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() безрезультатно. Любая помощь очень ценится.

ответ

5

Try заказ на только столбцы (т.е. второго аргумента [):

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 просто возвращает индексы относительно того, что заказывается, что в этом случае отсутствует в первом столбце, поэтому нам нужно все компенсировать одним
+1

Альтернатива: 'ESIVmatrix [C ("Стачки", сортировки (COLNAMES (ESIVmatrix) [- 1]))]' – thelatemail

+1

@thelatemail, согласен, я действительно считал, что один тоже, но решил пойти с чуть более общая, если менее интуитивная версия 'order'. – BrodieG

Смежные вопросы