所以我试图按日期和时间排序值。代码和输出如下所示:
> 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), ]
使用dplyr
和lubridate
-
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