首页 > 解决方案 > 无法在 R 中使用 cast 命令对数字列名进行排序

问题描述

我将列名作为时间戳,例如 0:00:00 1:00:00 10:00:00 11:00:00 12:00:00 13:00:00 14:00:00。

如您所见,时间戳 1:00:00 之后是 10:00:00 而不是 02:00:00。

通过挖掘这个主题,遇到了在数据框中对值进行排序的问题,并将值的数据类型转换为数字是解决方案。

我们如何将列名转换为数字并对列而不是数据进行排序?

标签: r

解决方案


我制作了一个示例数据集来说明我的解决方案:使用lubridate我们可以将 colnames 转换为时间格式,然后data.frame相应地排序:

df <- structure(list(`0:00:00` = 1:9, `1:00:00` = 10:18, `10:00:00` = 19:27, 
    `11:00:00` = 28:36, `12:00:00` = 37:45, `13:00:00` = 46:54, 
    `14:00:00` = 55:63), .Names = c("0:00:00", "1:00:00", "10:00:00", 
"11:00:00", "12:00:00", "13:00:00", "14:00:00"), class = "data.frame", row.names = c(NA, 
-9L))

df2 <- structure(list(`0:00:00` = 1:9, `1:00:00` = 19:27, `10:00:00` = 28:36, 
    `11:00:00` = 10:18, `12:00:00` = 37:45, `13:00:00` = 46:54, 
    `14:00:00` = 55:63), .Names = c("0:00:00", "1:00:00", "10:00:00", 
"11:00:00", "12:00:00", "13:00:00", "14:00:00"), class = "data.frame", row.names = c(NA, 
-9L))

library(lubridate)
df <- df[,order(hms(names(df)))]
df2 <- df2[,order(hms(names(df2)))]

推荐阅读