2015-06-23 4 views
0

Для упрощения управления данными у меня есть кадр данных в R, который содержит столбец со значениями даты и часа, записанными как таковые: июнь 5 23. «июнь 5» это месяц (без учета года), а «23» - это час (включая минуты и секунды, которые впоследствии могут вызвать проблемы при обработке данных). Я успешно разбил этот большой фрейм данных на несколько меньших кадров данных по дате и часу, используя этот команда:R: переупорядочить данные после команды split() с использованием таблицы нетрадиционной даты

dat<-split(df,with(df, df_datehour),drop=FALSE) 

Однако раскол, как и ожидалось, заказал мои данные лексически и поэтому она была организована в апреле -> июнь -> может вместо апреля -> май -> июнь. Я попытался решить эту проблему, воспользовавшись исправлением, которое я нашел в Интернете, которое должно было преобразовать столбец даты с помощью as.Date(). Однако это не работает. Я использую следующий код для преобразования Дата:

dat<-split(df,as.Date(with(df, df_datehour),format="%B %d %H"),drop=FALSE) 

Эта строка кода действительно удается поместить данные в порядке месяц и день, но она падает час полностью, как вы можете видеть из этот отрывок из моих результатов:

labels(dat) 
[57] "2015-06-05" 

Кто-нибудь знает об исправлении этой проблемы?

+0

Так что, если я правильно понять, вы не счастливы, что имена в списке не в правильном порядке? Вы можете сделать 'dat [c (" april "," may "," june "и т. Д.)]', Чтобы переопределить порядок. – Vlo

+0

Проблема в том, что я хотел бы переопределить заказ и включить день месяца и час дня. Я верю (исправьте меня, если я ошибаюсь), что, если бы я использовал ваш метод, мне пришлось бы сделать это, потому что [c («april 1 1», «april 1 2», «april 1 3» и т. Д.)] занимать очень много времени, поскольку у меня много точек данных. Я пытаюсь выяснить, есть ли более быстрое решение. –

+1

'dat [order (strptime (имена (dat)», «% B% d% H»))] 'преобразует имена в формат времени, сортирует имена, а затем возвращает индекс для переупорядочения. Возможно, самое главное, я не понимаю, что нужно, чтобы ваши имена были в порядке в списке. – Vlo

ответ

0

Преобразование имен в формат времени, переупорядочивание и переупорядочение списка по индексу.

dat[order(strptime(names(dat), "%B %d %H"))]