0

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

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 绘制了几个小时没有问题,所以我拥有的数据很好。但是,当我尝试使用 zoo 时,我要么得到错误,要么在尝试通过谷歌找到的结果时得到错误的结果。

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

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”的情节是每小时平均值,但我得到了一些奇怪的新索引,根本不是时间......

4

1 回答 1

0

题中的聚合语句存在三个问题:

  1. 我们不希望截断时间df

  2. trunc.POSIXt不幸的是返回了一个POSIXlt结果,所以它需要被转换回POSIXct

  3. 看来您一开始并不打算截断到小时,而是想提取小时。

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

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

但要解决最后一点,它需要完全更改为

tt <- as.POSIXlt(time(df))$hour
aggregate(df, tt, mean)
于 2013-05-20T16:49:49.277 回答