#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