我有一个如下数据集:
a <- read.table(header=TRUE, text="Time Counter Speed
7:55:00 CT08W 63.79
9:30:00 CT08W 67.69
7:05:00 CT11W 68.34
8:40:00 CT10W 68.39
11:00:00 CT11W 68.00
10:40:00 CT01W 21.57
11:35:00 CT02W 72.03
5:25:00 CT12W 66.93
6:10:00 CT02W 62.79
12:05:00 CT02W 71.79 ")
a
Time Counter Speed
1 7:55:00 CT08W 63.79
2 9:30:00 CT08W 67.69
3 7:05:00 CT11W 68.34
4 8:40:00 CT10W 68.39
5 11:00:00 CT11W 68.00
6 10:40:00 CT01W 21.57
7 11:35:00 CT02W 72.03
8 5:25:00 CT12W 66.93
9 6:10:00 CT02W 62.79
10 12:05:00 CT02W 71.79
str(a)
'data.frame': 10 obs. of 3 variables:
$ Time : Factor w/ 10 levels "10:40:00","11:00:00",..: 8 10 7 9 2 1 3 5 6 4
$ Counter: Factor w/ 6 levels "CT01W","CT02W",..: 3 3 5 4 5 1 2 6 2 2
$ Speed : num 63.8 67.7 68.3 68.4 68 ...
我不想在解决方案中使用as.POSIXct
,因为它会在注释数字时遇到困难。
ggplot(a, aes(x=Time, y=Counter, fill=Speed))
该图显示时间错误地排序。有没有办法在考虑时间的情况下订购时间?
答案 0 :(得分:1)
您可以使用时间变量的日期时间格式来订购因子。
关键是使用日期时间变量进行排序,这可以通过多种方式完成。在这里,我创建了一个日期时间变量,并在制作因子变量时对其进行排序。
a$dt = as.POSIXct(a$Time, format = "%H:%M:%S")
a$Time2 = factor(format(a$dt, "%H:%M:%S"), levels = format(sort(a$dt), "%H:%M:%S"))
a$Time2
[1] 07:55:00 09:30:00 07:05:00 08:40:00 11:00:00 10:40:00 11:35:00 05:25:00 06:10:00 12:05:00
Levels: 05:25:00 06:10:00 07:05:00 07:55:00 08:40:00 09:30:00 10:40:00 11:00:00 11:35:00 12:05:00
ggplot(a, aes(x=Time2, y=Counter, fill=Speed))
如果使用此方法并且时间不是唯一的,则需要将unique
添加到levels
参数中。
答案 1 :(得分:1)
a$Time <- factor(a$Time, levels = a$Time[order(as.POSIXct(a$Time, format = "%H:%M:%S"))])
ggplot(a, aes(x=Time, y=Counter, fill=Speed))