【发布时间】:2013-05-15 02:03:21
【问题描述】:
假设我在这些标题下有一个包含很多值的数据框:
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-axis: time of day (0-24), y-axis: value)
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”的图是每小时平均值,但我得到了一些奇怪的新索引,根本不是时间......
【问题讨论】:
-
问题中的代码没有定义时间(
zoo的第二个参数被省略)所以它假定1:nrow(df)是时间。你想要的动物园对象是zoo(df$value, df$Tid)或read.zoo(df)。 -
啊哈,我加载数据不正确。谢谢。但我仍然无法得到满意的结果。如果我运行
df.hr <- aggregate(df, trunc(df, "01:00:00"), mean),那么我只会得到像99 90 87 88 89 91 92 86 85 84 83 78.60000 80.20000 81.23333 82.62500 83.30000 84.51818 85.35000 86.52353 87.46316 88.52162 89.50435 82 81 80 78 90.36047 91.20000 92.10000 99.90000这样的十五个值,这与一天中的小时数完全不同...... -
您需要提供可重现的内容。以目前的形式无法真正回答。
-
我在末尾添加了一个代码 sn-p 可以说明我的问题。我截断小时后得到的索引与时间无关,所以情节看起来很遥远......