在 R 中按日期和时间对数据进行排序

sort data by date and time in R

所以我试图按日期和时间对值进行排序。代码和输出如下所示:


> 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)
   )

> 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

> 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

请给我一些建议。非常感谢。

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

d %>% mutate(new_t = as_datetime(t)) %>% arrange(new_t)

t列是字符类型,改成POSIXct即可对数据进行排序

在基础 R 中 -

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

使用 dplyrlubridate -

library(dplyr)
library(lubridate)

d %>%
  mutate(t = ymd_hms(t)) %>%
  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

我们也可以

library(parsedate)
library(dplyr)
d %>%
    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