从动物园时间序列中绘制截断时间

时间:2013-05-20 13:37:40

标签: r zoo

假设我在这些标题下有一个包含大量值的数据框:

df <- data.frame(c("Tid", "Value"))
#Tid.format = %Y-%m-%d %H:%M

然后我把那个数据框转到动物园,因为我想把它作为一个时间序列来处理:

library("zoo")
df <- zoo(df$Value, df$Tid)

现在我想制作一个平滑的散点图,在每个时间点进行每次测量(即丢弃日期信息,只保留时间),据说应该这样做:https://stat.ethz.ch/pipermail/r-help/2009-March/191302.html

但似乎time()函数根本不会产生任何时间;相反,它只是产生一个数字序列。无论我从该链接做什么,我都无法获得平均一天的值的散点图。实际工作的data.frame代码(不使用动物园时间序列)看起来像这样(即从时间中提取小时并将其转换为数字):

smoothScatter(data.frame(as.numeric(format(df$Tid,"%H")),df$Value)

我想做的另一件事是生成每小时测量次数的密度图。我已经使用常规data.frame绘制了几​​小时没有问题,因此我拥有的数据很好。但是当我尝试使用动物园时,我会遇到错误,或者在尝试通过Google找到的内容时得到错误的结果。

我确实设法通过这一行绘制了一些东西:

plot(density(as.numeric(trunc(time(df),"01:00:00"))))

但这不正确。它似乎再次产生一个从1到217的序列,我希望它截断任何日期信息,并将时间四舍五入到几小时。

我能够绘制这个:

plot(density(df))

生成值的密度图。但我想要一个密度图,记录每天每小时记录的数值。

所以,如果有人可以帮我解决这个问题,那就太好了。简而言之,我想做的是:

1)smoothScatter(x轴:时间(0-24),y轴:值)

2)图(密度(x轴:一天中的时间(0-24)))

编辑:

library("zoo")
df <- data.frame(Tid=strptime(c("2011-01-14 12:00:00","2011-01-31 07:00:00","2011-02-05 09:36:00","2011-02-27 10:19:00"),"%Y-%m-%d %H:%M"),Values=c(50,52,51,52))
df <- zoo(df$Values,df$Tid)
summary(df)
df.hr <- aggregate(df, trunc(df, "hours"), mean)
summary(df.hr)
png("temp.png")
plot(df.hr)
dev.off()

这段代码是我的一些实际值。我原本预计“df.hr”的情节是小时平均值,但我得到一些奇怪的新指数,而不是时间......

1 个答案:

答案 0 :(得分:0)

问题中的聚合语句有三个问题:

  1. 我们希望截断而不是df

  2. trunc.POSIXt很遗憾地返回POSIXlt结果,因此需要将其转换回POSIXct

  3. 您似乎并不打算在一开始就截断到小时但想要提取小时数。

  4. 要解决前两点,需要将aggregate语句更改为:

    tt <- as.POSIXct(trunc(time(df), "hours"))
    aggregate(df, tt, mean)
    

    但要解决最后一点,需要将其完全改为

    tt <- as.POSIXlt(time(df))$hour
    aggregate(df, tt, mean)