Столбец сортировки с датой и временем в кадре данных R

#r #date #time

Вопрос:

Я объединил несколько других фреймов данных вместе. Однако теперь даты больше не находятся в хронологическом порядке (см. фото). Как заказать фрейм данных на основе значений столбца «Дата»?

R вывод фрейма данных, который я хочу изменить

Я сначала попытался установить столбец «Дата» в качестве индекса, но, поскольку столбец «Дата» не только имеет уникальные значения, я не могу этого сделать.

Всякий раз, когда я это делаю:

 new_df <- new_df[order(new_df$Date),]
 

он сортирует даты только на основе их первого значения.

Кроме того, иногда для столбца «Дата» существует несколько одинаковых значений. Как я могу сделать индекс одинаковым, когда столбец «Дата» имеет одно и то же значение?

Ответ №1:

order Должно основываться на преобразованном в Date класс

 new_df$Date1 <- as.Date(new_df$Date, "%A, %d %b %Y, %H:%M")
 

Если мы хотим сохранить и часть времени при заказе, используйте as.POSIXct

 new_df$Date1 <- as.POSIXct(new_df$Date,format =  "%A, %d %b %Y, %H:%M")
 

а потом сделайте

 new_df <- new_df[order(new_df$Date1),]
 

Если мы хотим создать объект временных рядов, используйте xts

 library(xts)
xts(new_df["Income"], order.by = new_df$Date1)
 

В качестве воспроизводимого примера

 > str1 <- "Saturday, 12 Apr 2014, 18:00"
> as.Date(str1, "%A, %d %b %Y, %H:%M")
[1] "2014-04-12"
> as.POSIXct(str1, format = "%A, %d %b %Y, %H:%M")
[1] "2014-04-12 18:00:00 EDT"
 

Комментарии:

1. Спасибо, это сработало идеально. Можно ли также создать новый индекс на основе столбца Date1?

2. @Tobias ты хочешь заказать два заказа? Не совсем ясно

3. @Тобиас, ты имел в виду library(xts)xts(new_df[, "Income"], order.by = new_df$Date1)

4. @ parse_date_time(str1, "%A, %d %b %Y, %H:%M")# [1] "2014-04-12 18:00:00 UTC" TarJae тоже работает

5. Не уверен, что это хорошо работает для меня с «str1», который я показал