2011-10-05 55 views
11

所以我有這樣一組時間戳:如何只繪製時間戳的時間部分,包括日期?

datetime<-c("2011-09-28 03:33:00", "2011-08-24 13:41:00", "2011-09-19 16:14:00", "2011-08-18 11:01:00", "2011-09-17 06:35:00", "2011-08-15 12:48:00") 

我想要的只是時間的直方圖。我所做的就是給列在空間分割,僅保留時間,然後再轉換回POSIXct對象,以便qplot繪製它:

library(ggplot2, stringr)  
qplot(as.POSIXct(strptime((str_split_fixed(as.character(time), " ", 2)[,2]), "%H:%M:%S"))) 

然而,as.POSIXct(strptime((str_split_fixed(as.character(datetime), " ", 2)[,2]), "%H:%M:%S"))輸出

"2011-10-04 03:33:00 PDT" "2011-10-04 13:41:00 PDT" "2011-10-04 16:14:00 PDT" "2011-10-04 11:01:00 PDT" "2011-10-04 06:35:00 PDT" "2011-10-04 12:48:00 PDT" 

qplot繪製我想要的,但這似乎像對我來說是一個複雜的黑客。當然有更好的方法來做到這一點?我可以轉換成時代和陰謀,但我試圖避免這樣做,作爲一個額外的步驟。

更大的問題是,「我如何控制strptime的輸出?」

回答

13

這種方法怎麼樣?

require("ggplot2") 
dtstring <- c(
    "2011-09-28 03:33:00", "2011-08-24 13:41:00", "2011-09-19 16:14:00", 
    "2011-08-18 11:01:00", "2011-09-17 06:35:00", "2011-08-15 12:48:00" 
) 
dtPOSIXct <- as.POSIXct(dtstring) 

# extract time of 'date+time' (POSIXct) in hours as numeric 
dtTime <- as.numeric(dtPOSIXct - trunc(dtPOSIXct, "days")) 

p <- qplot(dtTime) + xlab("Time slot") + scale_x_datetime(format = "%S:00") 
print(p) 

計算dtPOSIXct - trunc(dtPOSIXct, "days")以小時爲單位提取POSIXct類對象的時間。

plot(p)

ggplot2-0.9.1

require("ggplot2") 
require("scales") 
dtstring <- c(
    "2011-09-28 03:33:00", "2011-08-24 13:41:00", "2011-09-19 16:14:00", 
    "2011-08-18 11:01:00", "2011-09-17 06:35:00", "2011-08-15 12:48:00" 
) 
dtPOSIXct <- as.POSIXct(dtstring) 

# extract time of 'date+time' (POSIXct) in hours as numeric 
dtTime <- as.numeric(dtPOSIXct - trunc(dtPOSIXct, "days")) 

p <- qplot(dtTime) + xlab("Time slot") + 
    scale_x_datetime(labels = date_format("%S:00")) 
print(p) 

對於ggplot2-0.9.3.1

require("ggplot2") 
require("scales") 
dtstring <- c(
    "2011-09-28 03:33:00", "2011-08-24 13:41:00", "2011-09-19 16:14:00", 
    "2011-08-18 11:01:00", "2011-09-17 06:35:00", "2011-08-15 12:48:00" 
) 
dtPOSIXct <- as.POSIXct(dtstring) 

# extract time of 'date+time' (POSIXct) in hours as numeric 
dtTime <- as.numeric(dtPOSIXct - trunc(dtPOSIXct, "days")) 
class(dtTime) <- "POSIXct" 

p <- qplot(dtTime) + xlab("Time slot") + 
    scale_x_datetime(labels = date_format("%S:00")) 
print(p) 
+0

謝謝,我還沒有使用trunc那麼多。總有一些新東西要學習! –

+1

我對某事感到困惑。儘管只有200多萬觀測值,但我正在處理類似的情況。當我使用** format =「%S:00」**時,所有X軸標籤都只有00:00。我嘗試改變爲** H **(S =秒和H =小時),這是不正確的:X軸開始於17:00,計數到0:00然後回到18: 00結束。 (這些標籤在25小時內均勻分佈) –

+0

嗯,我想知道這是否與CDT相關,這是距格林威治標準時間5小時的時間,而POSIX時間從1月1日格林尼治標準時間午夜開始計算,1970?所以,如果我爲每個值添加5 * 60 * 60 ... 不,從頭開始。我現在在科技委,這是GMT-6。 –

4

只需使用基本的工具,他們的目的:

dtstring <- c("2011-09-28 03:33:00", "2011-08-24 13:41:00", "2011-09-19 16:14:00", "2011-08-18 11:01:00", "2011-09-17 06:35:00", "2011-08-15 12:48:00") 
datetime <- as.POSIXct(dtstring) 
library(ggplot2) 
qplot(datetime) 

你的字符串的格式是與as.POSIXct解析默認,見?strptime瞭解詳情,或如果你有比這種格式以外的東西。

如果你想從你的日期時間值的特定字符串格式,請使用format,如

format(datetime, "%d-%b") 
[1] "28-Sep" "24-Aug" "19-Sep" "18-Aug" "17-Sep" "15-Aug" 

再次看到?strptime瞭解詳情。如果您確實想要垃圾時間值,則可以使用Date類。請注意,日期時間或日期需要完整的結構,其他表示只是格式化的文本。

qplot(as.Date(datetime))

+0

感謝您的回答,但繪製的時間戳,而不是隻是時間部分。實際上,我正在考慮剝離日期並僅繪製時間,因此x軸只能跨越24小時。 –

+0

您的''%d-%b「'變量對應'format'調用中的哪個關鍵字參數? ''格式'我找不到適合它的任何內容。 – TMOTTM

+0

See?strptime它是別名格式.POSIXct – mdsumner