R 顺序因子时间序列数据

R 顺序因子时间序列数据,r,ggplot2,time-series,R,Ggplot2,Time Series,我的数据集如下所示: 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 6

我的数据集如下所示:

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 ...


这幅图显示时间排列错误。有没有一种方法可以在计算系数时对时间进行排序?

您可以使用时间变量的日期时间格式对系数进行排序

关键是使用日期时间变量进行排序,可以通过多种方式进行排序。在这里,我创建了一个日期时间变量,并在生成factor变量时对其进行排序

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
参数中。

您可以使用时间变量的a日期时间格式对系数进行排序

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))
关键是使用日期时间变量进行排序,可以通过多种方式进行排序。在这里,我创建了一个日期时间变量,并在生成factor变量时对其进行排序

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
参数中。

a$Time
a$Time首先,需要将变量强制为日期/时间格式。目前,这是一个因素,这意味着订单是以
级别(a$TIME\u CNTR)
打印的。我提到我想避免使用日期/时间格式,因为这个问题需要在绘图中进行大量注释,这在日期/时间格式的绘图中很难处理。我正在考虑对系数时间戳进行伪排序。首先,需要将变量强制为日期/时间格式。目前,这是一个因素,这意味着订单是以
级别(a$TIME\u CNTR)
打印的。我提到我想避免使用日期/时间格式,因为这个问题需要在绘图中进行大量注释,这在日期/时间格式的绘图中很难处理。我正在考虑一个伪排序的系数时间戳。
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))