2014-10-19 24 views
4

我正在R中绘制一个绘图(在单个绘图中绘制三天的时间序列)。我有一个“POSIXlt”“POSIXt”矢量,我只需要保留时间(小时,分钟...)而无需年,月,日。仅保留“POSIXlt”“POSIXt”对象的小时:分钟:秒

"2004-09-08 13:50:00 GMT" ---> 13:50:00 
"2004-09-08 14:00:00 GMT" ---> 14:00:00 
"2004-09-08 14:10:00 GMT" ---> 14:10:00 
"2004-09-08 14:20:00 GMT" ---> 14:20:00 
"2004-09-08 14:30:00 GMT" ---> 14:30:00 

这可能吗?

我已经能够使向量中的所有元素具有相同的年/月/日。它适用于我的情节,但我不认为这是合适的解决方案。

"2004-09-08 13:50:00 GMT" ---> "2014-10-19 13:50:00 GMT" 
"2004-09-08 14:00:00 GMT" ---> "2014-10-19 14:00:00 GMT" 
"2004-09-08 14:10:00 GMT" ---> "2014-10-19 14:10:00 GMT" 
"2004-09-08 14:20:00 GMT" ---> "2014-10-19 14:20:00 GMT" 
"2004-09-08 14:30:00 GMT" ---> "2014-10-19 14:30:00 GMT" 

谢谢

+0

这是不可能的。 POSIXc值是日期/时间值。基地R不具有只有时间的数据类型。在大多数情况下,将所有YMD值设置为相同的值是最佳解决方案。 – MrFlick 2014-10-19 17:12:24

+0

你可以用'format(x,format =“%H:%M:%S”)得到一个字符向量,其中'x'是POSIXt值的向量。但是它将成为'character'类' – 2014-10-19 17:13:28

+0

如果您使用'ggplot2',那么您可以将'format'传递给'scale_x_datetime'以仅显示HMS – hrbrmstr 2014-10-19 17:19:44

回答

7

假设我们有POSIXct值x

library(chron) 

# input 
y <- 1:5 
x <- as.POSIXct(c("2004-09-08 13:50:00", "2004-09-08 14:00:00", "2004-09-08 14:10:00", 
"2004-09-08 14:20:00", "2004-09-08 14:30:00")) 

1)将它们转换为克隆氏病类"times"和情节:

ti <- times(format(x, "%H:%M:%S")) 
plot(y ~ ti) 

2)或者你可以用动物园做到这一点:

library(zoo) 

z <- zoo(y, x) 

# convert index to "times" class and plot 
zz <- z 
time(zz) <- times(format(time(zz), "%H:%M:%S")) 
plot(zz) 

2A)或者使用ggplot2和autoplot.zoo来绘制:

library(ggplot2) 
autoplot(zz) + scale_x_chron(format = "%H:%M") 

图2b)我们也可以仅仅通过贴标签,而不是转换的指数类处理这个问题。这使用动物园/ ggplot2/scale但不是chron时间,并简单地重新映射X轴:

library(scales) 
autoplot(z) + scale_x_datetime(breaks = "10 min", labels = date_format("%H:%M"))