2011-10-05 36 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