R语言按日期时间排序结果不符合预期的解决方法
你遇到的排序错误是因为数据框中t列目前为字符串类型,默认按字符串字典序排序时,会逐位比较字符ASCII值,导致2021/7/10排在2021/7/8之前(因为字符1的ASCII值小于8)。只要先将该列转换为R可识别的日期时间类型,再排序即可得到预期结果。
方案1:基础R实现
# 1. 将t列转换为POSIXct日期时间格式,指定对应格式规则 d$t <- as.POSIXct(d$t, format = "%Y/%m/%d %H:%M:%S") # 2. 按时间列升序排序 d_sorted <- d[order(d$t), ] # 查看排序结果 print(d_sorted)
运行后输出即为你需要的按时间先后升序的结果。
方案2:tidyverse生态实现(适合常用dplyr的场景)
# 加载依赖包 library(dplyr) library(lubridate) d_sorted <- d %>% # 转换时间列,ymd_hms会自动适配年月日时分秒的常见分隔格式 mutate(t = ymd_hms(t)) %>% # 按时间列升序排列 arrange(t)
如果后续需要把时间列转回字符串格式展示,可使用format(d_sorted$t, "%Y/%m/%d %H:%M:%S")转换即可。
内容的提问来源于stack exchange,提问作者user11806155
相关产品推荐
相关产品推荐

