2016-08-16 4 views
0

У меня есть набор данных, как следующее:Order разложенном Time Series Data

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

enter image description here

График показывает, что время заказан неправильно. Есть ли способ упорядочить время, пока оно учитывается?

+0

Во-первых, вам необходимо принудить переменную к формату даты/времени. В настоящее время это фактор, который означает, что порядок печатается с 'уровнями ($ TIME_CNTR)'. –

+0

Я упомянул, что хочу избежать формата даты/времени, так как эта проблема требует большого количества аннотаций в сюжете, который трудно обрабатывать в графиках формата даты/времени. Я думаю о псевдо-заказе за факторизованные штампы времени. –

ответ

1

Вы можете использовать формат даты и времени для вашей временной переменной, чтобы заказать свой коэффициент.

Ключ использует переменную date-time для сортировки, которая может быть выполнена различными способами. Здесь я создаю переменную date-time и сортирую ее при создании переменной-фактора.

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

enter image description here

При использовании этого метода, и время не являются уникальными, вам нужно добавить unique в levels аргумент.

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