2016-12-20 6 views
1

У меня есть три кадров данных df1, df2, df3 в следующем форматеR: участок несколько строк в одном участке

datetime    value 
2012-01-02 00:00:00 1.2 
2012-01-02 00:15:00 1.7 
2012-01-02 00:30:00 0.5 
2012-01-02 00:45:00 0.8 


datetime    value 
2012-01-03 00:00:00 0.4 
2012-01-03 00:15:00 1.1 
2012-01-03 00:30:00 1.8 
2012-01-03 00:45:00 0.7 

datetime    value 
2012-01-04 00:00:00 2.9 
2012-01-04 00:15:00 0.7 
2012-01-04 00:30:00 1.3 
2012-01-04 00:45:00 0.3 

Все три кадра данных имеют разные даты, то datetime в формате POSIXlt.

Поскольку индекс времени тот же, я хочу построить все линии на одном и том же участке. Но я не уверен, как извлечь время только. Я делал следующий до сих пор:

library(chron) 
timeOnly = times(format(df1$datetime, "%H:%M:%S")) 
plot(timeOnly, df1$value) 

Но ось х клещ метки перехода от 0 to 1, вместо 00:00:00 to 23:45:00

+0

Я ответил, не точно те же данные, но я думаю, что это ответ вы re looking for –

+0

@chintans Я заметил опечатку в вашей последней строке. Вы определили время, которое вы хотите как «timeOnly1», но затем вы помещаете «timeOnly» в функцию графика. Возможно, вы определили timeOnly иначе, чем timeOnly1? Я запустил тот же код, но с графиком (timeOnly1, df1 $ value) и получил правильную ось x. – jjet

+0

Спасибо, я исправил опечатку. Но я хочу, чтобы ось х была от 00:00 до 23: 45. Как это получить? –

ответ

1

отредактирован имеют разные даты, Это как я бы решить, добавить класс, а затем rbind на dataframes и сюжет его:

library(lubridate) 
set.seed(1) 
df1 <- data.frame(date_time = seq(ymd_hm('2012-01-02 00:00'),ymd_hm('2012-01-02 23:45'), by = '15 min') 
       , value = rnorm(4, mean = 1, sd =0.2), class = "a") 
set.seed(2) 
df2 <- data.frame(date_time = seq(ymd_hm('2012-01-03 00:00'),ymd_hm('2012-01-03 23:45'), by = '15 min') 
       , value = rnorm(4, mean = 1, sd =0.2), class = "b") 
set.seed(3) 
df3 <- data.frame(date_time = seq(ymd_hm('2012-01-04 00:00'),ymd_hm('2012-01-04 23:45'), by = '15 min') 
       , value = rnorm(4, mean = 1, sd =0.2), class = "c") 


df <- rbind(df1,df2, df3) 
df$time <- as_date(hm(paste(hour(df$date_time),minute(df$date_time), sep=":"))) 
library(ggplot2) 

ggplot(df, aes(x = time, y = value)) + geom_line(aes(color = class))+ scale_x_datetime(date_labels = "%H %M") 

enter image description here

+0

Спасибо, но вы сохранили ту же дату во всех кадрах данных. В моем случае все три кадра данных имеют разные даты. –

+1

Извините @ chintans, я вижу, что вам нужно, вернитесь во второй –

+0

ready @chintans Я исправил его, вы используете разные даты и делаете один и тот же сюжет, смотрите, как я изменил даты фрейма данных и все еще работает –

Смежные вопросы