Я борюсь с чем-то очень простым: сортировка кадра данных на основе формата времени (месяц-год или «% B-% y» в этом случае) , Моя цель - рассчитать различные ежемесячные статистические данные, начиная с суммы.Сортировка фрейма данных на основе месячного формата времени
Часть соответствующей части кадра данных выглядит следующим образом (Это идет хорошо, и в соответствии с моей целью я включаю его здесь, чтобы показать, где проблема может происходит из.):
> tmp09
Instrument AccountValue monthYear ExitTime
1 JPM 6997 april-07 2007-04-10
2 JPM 7261 mei-07 2007-05-29
3 JPM 7545 juli-07 2007-07-18
4 JPM 7614 juli-07 2007-07-19
5 JPM 7897 augustus-07 2007-08-22
10 JPM 7423 november-07 2007-11-02
11 KFT 6992 mei-07 2007-05-14
12 KFT 6944 mei-07 2007-05-21
13 KFT 7069 juli-07 2007-07-09
14 KFT 6919 juli-07 2007-07-16
# Order on the exit time, which corresponds with 'monthYear'
> tmp09.sorted <- tmp09[order(tmp09$ExitTime),]
> tmp09.sorted
Instrument AccountValue monthYear ExitTime
1 JPM 6997 april-07 2007-04-10
11 KFT 6992 mei-07 2007-05-14
12 KFT 6944 mei-07 2007-05-21
2 JPM 7261 mei-07 2007-05-29
13 KFT 7069 juli-07 2007-07-09
14 KFT 6919 juli-07 2007-07-16
3 JPM 7545 juli-07 2007-07-18
4 JPM 7614 juli-07 2007-07-19
5 JPM 7897 augustus-07 2007-08-22
10 JPM 7423 november-07 2007-11-02
Пока что так хорошо, и сортировка основана на работе ExitTime. Проблема начинается тогда, когда я пытаюсь вычислить суммы в месяц, а затем попытки сортировать этот вывод:
# Calculate the total results per month
> Tmp09Totals <- tapply(tmp09.sorted$AccountValue, tmp09.sorted$monthYear, sum)
> Tmp09Totals <- data.frame(Tmp09Totals)
> Tmp09Totals
Tmp09Totals
april-07 6997
augustus-07 7897
juli-07 29147
mei-07 21197
november-07 7423
Как сортировать этот вывод в хронологическом порядке?
Я уже пробовал (помимо различных попыток конвертировать формат monthYear в другой формат даты): упорядочить, сортировать, сортировать, сортировать_df, изменять форму и вычислять сумму на основе tapply, lapply, sapply, aggregate. И даже переписывая имена розеток (давая им число от 1 до длины (tmp09.sorted2 $ AccountValue)), не работает. Я также пытался дать каждому месяцу год другой идентификатор, основанный на том, что я узнал по другому вопросу, но R также испытывал трудности с различиями между различными месячными значениями.
Правильный порядок этого вывода будет апрель-07, мэй-07, Juli-07, augustus07, ноябрь-07:
apr-07 6997
mei-07 21197
jul-07 29147
aug-07 7897
nov-07 7423
Я из идей, у вас есть?
Спасибо за ваш подробный ответ Гэвин! Это сработало, как хотелось бы. В особенности совокупная функция дает хороший сложный вывод за разные годы в полном наборе данных (а также достаточно эффективна для различных расчетов). Я получил ошибку с 'levels = month.name', но после замены месяца.имя с пользовательским вектором с именами месяцев в моей локали, эта проблема была решена. :) Благодаря! – Jura25
@ Jura25; да, извините - это английские месяцы ... '? month.name' имеет этот пример для имен месяцев в вашем текущем языковом формате:' format (ISOdate (2000, 1:12, 1), "% B") ', который может спасти вас от ввода имени месяца каждый раз, когда вы хотите их использовать. –
Не нужно извиняться. :) Я в первую очередь упомянул об этом здесь, если кто-то другой сможет его использовать. Спасибо за функцию ISOdate, я не знал об этом, и это действительно очень удобно. – Jura25