2017-08-14 84 views
2

我正在分析日常數據以查看值何時會降低。我將每一天都設定爲分類變量,這樣我就可以區分每一天。但是我想讓每一天都繪製在另一天的頂部,而不是如下所示的連續圖形。R - 僅從xts,zoo和POSIXct提取時間

Plot

數據集:

    Value  Day 
2013-01-03 01:55:00 0.35435715 1 
2013-01-03 02:00:00 0.33018654 1 
2013-01-03 02:05:00 0.38976118 1 
2013-01-04 02:10:00 0.45583868 2 
2013-01-04 02:15:00 0.29290860 2 

我現在ggplot代碼如下:

g <- ggplot(data = Data, aes(x = Index, color = Dates)) + 
    geom_line(y = Data$Value) + 
    scale_x_datetime(date_breaks = TimeIntervalForGraph, date_labels = "%H") + 
    xlab("Time") + 
    ylab("Random value") 

我真的很感激,如果有人能指導我如何,我可以把我的X將軸轉換成24小時的時間序列,以便我可以在同一圖表上繪製每天的圖表,以查看24小時內的值何時降低。提前感謝。

方法嘗試: 我想只有時間創建第三列,因爲某些原因如下代碼沒有工作:

time <- format(index(x), format = "%H:%M")) 
data <- cbind(data, time) 

回答

3

你需要總結的數據爲一天的每個小時的方式。下面是一些你可能會尋找方法:

library(xts) 
library(data.table) 
library(ggplot2) 

tm <- seq(as.POSIXct("2017-08-08 17:30:00"), by = "5 mins", length.out = 10000) 
z <- xts(runif(10000), tm, dimnames = list(NULL, "vals")) 

DT <- data.table(time = index(z), coredata(z)) 
# note the data.table syntax is different: 
DT[, hr := hour(time)] 

# Plot the average value by hour: 
datByHour <- DT[, list(avgval = mean(vals)), by = c("hr")] 

# Use line plot if you have one point per hour: 
g <- ggplot(data = datByHour, aes(x = hr, y = avgval, colour = avgval)) + 
    geom_line() 


datByHour <- DT[, list(avgval = mean(vals)), by = c("hr")] 
# visualise the distribution by hour: 
g2 <- ggplot(data = DT, aes(x = hr, y = vals, group = hr)) + 
    geom_boxplot() 
2

請嘗試以下方法,讓我知道,如果它(我在這裏取給出tm時間列):

Data$tm = strftime(Data$tm, format="%H:%M:%S") 

library(ggplot2) 
ggplot(Data, aes(x = tm, y = Value, group = Day, colour = Day)) + 
    geom_line() + 
    theme_classic() 
+0

我得到了所有NA與以下錯誤消息: 警告消息: 在merge.xts(...,所有=所有,填填=,後綴=後綴): 通過強制 – blackknight316

+0

引入的NAs可以使用'dput()'發佈數據嗎?根據要求提供 – AK88

+0

。 結構(C(1357189200,1357189500,1357189800 ..... 1357620600,1357620900), tzone = 「美國/紐約」, tclass = C( 「POSIXct」, 「POSIXt」)), .indexCLASS = C (「POSIXct」,「POSIXt」), .indexTZ =「America/New_York」, tclass = c(「POSIXct」,「POSIXt」), tzone =「America/New_York」,class = c(「xts」 , 「動物園」)) – blackknight316