在R中创建开始/结束日期时间数组

在R中创建开始/结束日期时间数组,r,time-series,zoo,chron,R,Time Series,Zoo,Chron,我用R做了一些时间序列分析,用zoo和chron。我有一个包含大量数据的zoo对象,需要能够使用窗口函数将数据子集为只值一天,然后是下一天,然后是下一天等等 我试图找到一种最简单的方法来创建一个数组,其中包含某段时间内每天的日期,并得出以下结论: orig = c(month=1, day=1, year=2005) dates <- chron(1:1825, origin=orig, out.format=c(dates="d/m/y", times="h:m")) 但是,这给了我一

我用R做了一些时间序列分析,用zoo和chron。我有一个包含大量数据的zoo对象,需要能够使用
窗口
函数将数据子集为只值一天,然后是下一天,然后是下一天等等

我试图找到一种最简单的方法来创建一个数组,其中包含某段时间内每天的日期,并得出以下结论:

orig = c(month=1, day=1, year=2005)
dates <- chron(1:1825, origin=orig, out.format=c(dates="d/m/y", times="h:m"))
但是,这给了我一个警告,说明我对
aeronet
zoo对象和
s
e
变量使用了不同的来源,并且它没有选择任何数据


有更好的方法吗?还是解决这个问题的方法?基本上,我想运行一个for循环,在这个循环中,我可以使用
aeronet\u day=window(aeronet,start=s,end=e)
code生成一个包含一天数据的zoo对象(例如,2005年5月1日00:00:00至23:59:59。

我对zoo不熟悉,但我通常只将日期转换为数字,然后进行排序,然后再转换回来。例如:

> as.Date(Sys.Date():(Sys.Date()+365), origin='1970-01-01')
  [1] "2011-12-06" "2011-12-07" "2011-12-08" "2011-12-09" "2011-12-10" "2011-12-11" "2011-12-12" "2011-12-13"
  [9] "2011-12-14" "2011-12-15" "2011-12-16" "2011-12-17" "2011-12-18" "2011-12-19" "2011-12-20" "2011-12-21"
 [17] "2011-12-22" "2011-12-23" "2011-12-24" "2011-12-25" "2011-12-26" "2011-12-27" "2011-12-28" "2011-12-29"
 [25] "2011-12-30" "2011-12-31" "2012-01-01" "2012-01-02" "2012-01-03" "2012-01-04" "2012-01-05" "2012-01-06"
 [33] "2012-01-07" "2012-01-08" "2012-01-09" "2012-01-10" "2012-01-11" "2012-01-12" "2012-01-13" "2012-01-14"
 [41] "2012-01-15" "2012-01-16" "2012-01-17" "2012-01-18" "2012-01-19" "2012-01-20" "2012-01-21" "2012-01-22"
...

如果你想在每次约会的基础上做点什么,那么你所拥有的一切都很好

一些样本
aeronet
数据

last_date <- 1825
n <- 10000
aeronet <- data.frame(
  some.value = seq_len(n), 
  date = as.chron(
    runif(n, 0, last_date), 
    origin = orig,
    out.format = c(dates = "d/m/y", times = "h:m")
  )
)

假设我们有以下数据:

# create test data
library(zoo)
library(chron)
z <- zooreg(1:30, start = chron("2000-01-01"), freq = 2)
如果愿意,我们可以用更复杂的函数替换
mean

2)split。R
split
函数有一个zoo方法。如果我们真的想按日期分割
z
,那么我们可以这样做。这里的
z.split.list
是一个列表,每个组件都包含一个日期的zoo对象

z.split.list <- split(z, as.Date(time(z)))
请注意,
as.Date(time(z))
是一个向量,其日期对应于z的元素

编辑:


各种小细节。

我不确定你想做什么,但也许
xts::apply。每日
可能会有所帮助?事实上你正在使用
chron
zoo
(有自己的时间序列格式)可能会使你的代码/生活变得比它应该的更复杂。你能只使用其中一个吗?(如果不行,请查看
lubridate
)。@richicotton:
zoo
没有任何时间序列格式。它与索引的类别完全无关(即,它甚至不必是基于时间的)因此,
Sys.Date()+0:365
(利用
+.Date
方法)更加简洁!
# create test data
library(zoo)
library(chron)
z <- zooreg(1:30, start = chron("2000-01-01"), freq = 2)
z.ag <- aggregate(z, as.Date, mean)
z.split.list <- split(z, as.Date(time(z)))
for(zc in z.split.list) print(zc)