R 按时间对向量排序

R 按时间对向量排序,r,R,我有一个由时间组成的因子变量。当我试图把它变成一个因子时,R按从低到高的顺序排列。不幸的是,这意味着我的结局如下: 1:48:55 1:53:11 1:58:18 10:04:01 10:12:45 10:14:16 10:20:24 10:21:59 10:23:11 10:23:40 10:30:40 10:34:13 10:39:47 10:54:33 10:58:43 3:21:59 3:27:38 3:37:58 3:49:00 4:20:42 4:30:52 4

我有一个由时间组成的因子变量。当我试图把它变成一个因子时,R按从低到高的顺序排列。不幸的是,这意味着我的结局如下:

1:48:55  1:53:11  1:58:18  10:04:01 10:12:45 10:14:16 
10:20:24 10:21:59 10:23:11 10:23:40 10:30:40 10:34:13 
10:39:47 10:54:33 10:58:43 3:21:59  3:27:38  3:37:58  
3:49:00 4:20:42  4:30:52  4:37:39  4:40:08  4:40:55  
4:42:25  5:03:25  5:10:30  5:10:49  5:12:39  5:14:20
因此,不是按顺序打印时间,而是在7:00之前打印10:00的时间

有没有按实际时间快速排序的方法

    time = c("1:48:55", "1:53:11", "1:58:18", "10:04:01", "10:12:45", "10:14:16", "10:20:24", "10:21:59", "10:23:11", "10:23:40", "10:30:40", "10:34:13", "10:39:47", "10:54:33", "10:58:43", "3:21:59", "3:27:38", "3:37:58", "3:49:00", "4:20:42", "4:30:52", "4:37:39",  "4:40:08", "4:40:55", "4:42:25", "5:03:25", "5:10:30", "5:10:49", "5:12:39", "5:14:20")

time = factor(time)

项目按其顺序排列,因此如果您使用
因子
,它们将保持该顺序,但您可以通过某种方式设置水平,让回归“正确”地报告它们。gtools中的
mixedsort
函数将按预期对这些字符向量进行排序:

require(gtools)
mixedsort(time)
 [1] "1:48:55"  "1:53:11"  "1:58:18"  "3:21:59"  "3:27:38"  "3:37:58"  "3:49:00"  "4:20:42"  "4:30:52" 
[10] "4:37:39"  "4:40:08"  "4:40:55"  "4:42:25"  "5:03:25"  "5:10:30"  "5:10:49"  "5:12:39"  "5:14:20" 
[19] "10:04:01" "10:12:45" "10:14:16" "10:20:24" "10:21:59" "10:23:11" "10:23:40" "10:30:40" "10:34:13"
[28] "10:39:47" "10:54:33" "10:58:43"

> time=factor(time, levels= mixedsort(time))
> levels(time)
 [1] "1:48:55"  "1:53:11"  "1:58:18"  "3:21:59"  "3:27:38"  "3:37:58"  "3:49:00"  "4:20:42"  "4:30:52" 
[10] "4:37:39"  "4:40:08"  "4:40:55"  "4:42:25"  "5:03:25"  "5:10:30"  "5:10:49"  "5:12:39"  "5:14:20" 
[19] "10:04:01" "10:12:45" "10:14:16" "10:20:24" "10:21:59" "10:23:11" "10:23:40" "10:30:40" "10:34:13"
[28] "10:39:47" "10:54:33" "10:58:43"
> time
 [1] 1:48:55  1:53:11  1:58:18  10:04:01 10:12:45 10:14:16 10:20:24 10:21:59 10:23:11 10:23:40 10:30:40
[12] 10:34:13 10:39:47 10:54:33 10:58:43 3:21:59  3:27:38  3:37:58  3:49:00  4:20:42  4:30:52  4:37:39 
[23] 4:40:08  4:40:55  4:42:25  5:03:25  5:10:30  5:10:49  5:12:39  5:14:20 
30 Levels: 1:48:55 1:53:11 1:58:18 3:21:59 3:27:38 3:37:58 3:49:00 4:20:42 4:30:52 4:37:39 ... 10:58:43
如果希望它们作为时间值进行排序,则需要选择要使用的时间类。chron软件包是一种可能的选择:

time = c("1:48:55", "1:53:11", "1:58:18", "10:04:01", "10:12:45", "10:14:16", "10:20:24", "10:21:59", "10:23:11", "10:23:40", "10:30:40", "10:34:13", "10:39:47", "10:54:33", "10:58:43", "3:21:59", "3:27:38", "3:37:58", "3:49:00", "4:20:42", "4:30:52", "4:37:39",  "4:40:08", "4:40:55", "4:42:25", "5:03:25", "5:10:30", "5:10:49", "5:12:39", "5:14:20")

> chron(times=time)
 [1] 01:48:55 01:53:11 01:58:18 10:04:01 10:12:45 10:14:16 10:20:24 10:21:59 10:23:11 10:23:40 10:30:40
[12] 10:34:13 10:39:47 10:54:33 10:58:43 03:21:59 03:27:38 03:37:58 03:49:00 04:20:42 04:30:52 04:37:39
[23] 04:40:08 04:40:55 04:42:25 05:03:25 05:10:30 05:10:49 05:12:39 05:14:20
> sort(chron(times=time))
 [1] 01:48:55 01:53:11 01:58:18 03:21:59 03:27:38 03:37:58 03:49:00 04:20:42 04:30:52 04:37:39 04:40:08
[12] 04:40:55 04:42:25 05:03:25 05:10:30 05:10:49 05:12:39 05:14:20 10:04:01 10:12:45 10:14:16 10:20:24
[23] 10:21:59 10:23:11 10:23:40 10:30:40 10:34:13 10:39:47 10:54:33 10:58:43

项目按其顺序排列,因此如果您使用
因子
,它们将保持该顺序,但您可以通过某种方式设置水平,让回归“正确”地报告它们。gtools中的
mixedsort
函数将按预期对这些字符向量进行排序:

require(gtools)
mixedsort(time)
 [1] "1:48:55"  "1:53:11"  "1:58:18"  "3:21:59"  "3:27:38"  "3:37:58"  "3:49:00"  "4:20:42"  "4:30:52" 
[10] "4:37:39"  "4:40:08"  "4:40:55"  "4:42:25"  "5:03:25"  "5:10:30"  "5:10:49"  "5:12:39"  "5:14:20" 
[19] "10:04:01" "10:12:45" "10:14:16" "10:20:24" "10:21:59" "10:23:11" "10:23:40" "10:30:40" "10:34:13"
[28] "10:39:47" "10:54:33" "10:58:43"

> time=factor(time, levels= mixedsort(time))
> levels(time)
 [1] "1:48:55"  "1:53:11"  "1:58:18"  "3:21:59"  "3:27:38"  "3:37:58"  "3:49:00"  "4:20:42"  "4:30:52" 
[10] "4:37:39"  "4:40:08"  "4:40:55"  "4:42:25"  "5:03:25"  "5:10:30"  "5:10:49"  "5:12:39"  "5:14:20" 
[19] "10:04:01" "10:12:45" "10:14:16" "10:20:24" "10:21:59" "10:23:11" "10:23:40" "10:30:40" "10:34:13"
[28] "10:39:47" "10:54:33" "10:58:43"
> time
 [1] 1:48:55  1:53:11  1:58:18  10:04:01 10:12:45 10:14:16 10:20:24 10:21:59 10:23:11 10:23:40 10:30:40
[12] 10:34:13 10:39:47 10:54:33 10:58:43 3:21:59  3:27:38  3:37:58  3:49:00  4:20:42  4:30:52  4:37:39 
[23] 4:40:08  4:40:55  4:42:25  5:03:25  5:10:30  5:10:49  5:12:39  5:14:20 
30 Levels: 1:48:55 1:53:11 1:58:18 3:21:59 3:27:38 3:37:58 3:49:00 4:20:42 4:30:52 4:37:39 ... 10:58:43
如果希望它们作为时间值进行排序,则需要选择要使用的时间类。chron软件包是一种可能的选择:

time = c("1:48:55", "1:53:11", "1:58:18", "10:04:01", "10:12:45", "10:14:16", "10:20:24", "10:21:59", "10:23:11", "10:23:40", "10:30:40", "10:34:13", "10:39:47", "10:54:33", "10:58:43", "3:21:59", "3:27:38", "3:37:58", "3:49:00", "4:20:42", "4:30:52", "4:37:39",  "4:40:08", "4:40:55", "4:42:25", "5:03:25", "5:10:30", "5:10:49", "5:12:39", "5:14:20")

> chron(times=time)
 [1] 01:48:55 01:53:11 01:58:18 10:04:01 10:12:45 10:14:16 10:20:24 10:21:59 10:23:11 10:23:40 10:30:40
[12] 10:34:13 10:39:47 10:54:33 10:58:43 03:21:59 03:27:38 03:37:58 03:49:00 04:20:42 04:30:52 04:37:39
[23] 04:40:08 04:40:55 04:42:25 05:03:25 05:10:30 05:10:49 05:12:39 05:14:20
> sort(chron(times=time))
 [1] 01:48:55 01:53:11 01:58:18 03:21:59 03:27:38 03:37:58 03:49:00 04:20:42 04:30:52 04:37:39 04:40:08
[12] 04:40:55 04:42:25 05:03:25 05:10:30 05:10:49 05:12:39 05:14:20 10:04:01 10:12:45 10:14:16 10:20:24
[23] 10:21:59 10:23:11 10:23:40 10:30:40 10:34:13 10:39:47 10:54:33 10:58:43
试试这个:

library(chron)
sort(times(time))
或者,如果希望排序后的向量保持为一个因子:

time[order(times(time))]
试试这个:

library(chron)
sort(times(time))
或者,如果希望排序后的向量保持为一个因子:

time[order(times(time))]

简短添加:注意,根据定义,因子是无序的!然而,由于R拥有您所需要的一切,因此存在数据类型
ordered
,这只是一个具有定义顺序的因素。如果在DWins答案中用
ordered
替换
factor
,您的数据类型将更有意义(尽管,如果您只显示factor,则不会有明显的差异。但是,在某些统计方法中,会有明显的差异)。我对有序因子的经验是,它们在任何地方都会造成混乱,所以我不推荐新手使用。简短补充:注意,根据定义,因子是无序的!然而,由于R拥有您所需要的一切,因此存在数据类型
ordered
,这只是一个具有定义顺序的因素。如果在DWins答案中用
ordered
替换
factor
,您的数据类型将更有意义(尽管,如果您只显示factor,则不会有明显的差异。但是,在某些统计方法中,会有明显的差异)。我对有序因子的经验是,它们在任何地方都会造成混乱,所以我不推荐新手使用。