假设我在这些标题下有一个包含大量值的数据框:
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”的情节是小时平均值,但我得到一些奇怪的新指数,而不是时间......
答案 0 :(得分:0)
问题中的聚合语句有三个问题:
我们希望截断次而不是df
。
trunc.POSIXt
很遗憾地返回POSIXlt
结果,因此需要将其转换回POSIXct
您似乎并不打算在一开始就截断到小时但想要提取小时数。
要解决前两点,需要将aggregate
语句更改为:
tt <- as.POSIXct(trunc(time(df), "hours"))
aggregate(df, tt, mean)
但要解决最后一点,需要将其完全改为
tt <- as.POSIXlt(time(df))$hour
aggregate(df, tt, mean)