按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,然后可以对数据进行排序。

In base 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

相关内容

  • 没有找到相关文章

最新更新