сортировка данных по дате и времени в R

#r #date #sorting #time

Вопрос:

Поэтому я пытаюсь отсортировать значения по дате и времени. Коды и выходные данные выглядят следующим образом:

  gt; d=data.frame(  t=c('2021/7/10 9:40:06','2021/7/13 17:14:59',  '2021/7/8 17:54:41','2021/7/8 17:36:32'),  value=c(342,353,1431,624)  )  gt; d  t value 1 2021/7/10 9:40:06 342 2 2021/7/13 17:14:59 353 3 2021/7/8 17:54:41 1431 4 2021/7/8 17:36:32 624  gt; d[order(d$t),]  t value 1 2021/7/10 9:40:06 342 2 2021/7/13 17:14:59 353 4 2021/7/8 17:36:32 624 3 2021/7/8 17:54:41 1431   

Поскольку данные были упорядочены по возрастанию по t, то, что я ожидал, должно было быть так:

 1 2021/7/8 17:36:32 624 2 2021/7/8 17:54:41 1431 3 2021/7/10 9:40:06 342 4 2021/7/13 17:14:59 353  

Пожалуйста, дайте мне несколько предложений. Большое спасибо.

Ответ №1:

 library(dplyr) library(lubridate)  d %gt;% mutate(new_t = as_datetime(t)) %gt;% arrange(desc(new_t))  

или

 d %gt;% mutate(new_t = as_datetime(t)) %gt;% arrange(new_t)  

Ответ №2:

Столбец t имеет символьный тип, измените его на POSIXct , а затем вы сможете упорядочить данные.

В базе R —

 d lt;- transform(d, t = as.POSIXct(t, format = '%Y/%m/%d %T')) d[order(d$t), ]   

Использование dplyr и lubridate

 library(dplyr) library(lubridate)  d %gt;%  mutate(t = ymd_hms(t)) %gt;%  arrange(t)  # t value #1 2021-07-08 17:36:32 624 #2 2021-07-08 17:54:41 1431 #3 2021-07-10 09:40:06 342 #4 2021-07-13 17:14:59 353  

Ответ №3:

Мы также можем сделать

 library(parsedate) library(dplyr) d %gt;%  arrange(parse_date(t))  

-выход

 t value 1 2021/7/8 17:36:32 624 2 2021/7/8 17:54:41 1431 3 2021/7/10 9:40:06 342 4 2021/7/13 17:14:59 353