按照另一个不规则的时间序列拆分一个时间序列

3

我想要将几个带有唯一的不规则时间序列的xts对象进行拆分。 split.xts 按照天、分钟、秒等进行拆分。使用断点需要长度相等的向量,这会导致当我尝试拆分我的数据时出现错误。

dd <- c("2014-02-23","2014-03-12", "2014-05-29")
tt <- c("03:15:52", "03:49:17", "04:03:24", "05:30:19", "05:56:49",
        "06:14:04", "09:42:13", "11:57:25", "11:58:02", "12:12:49",
        "15:38:00", "15:44:21", "16:16:04")
dt <- c(outer(dd,tt,paste))
xx <- as.xts(seq_along(dt), as.POSIXct(dt))
spltr <- c("2014-01-13 12:09:32", "2014-02-09 06:23:41",
           "2014-03-01 13:35:12", "2014-05-14 07:12:52")

我试图通过 spltrxx 进行分割,以找出每个片段中记录的频率。 我尝试使用 aggregate(xx,by=spltr,length) 但是因为 spltr 的长度与 xx 不同而出现错误。 split.xts 不起作用,因为 spltr 不规则。


抱歉,我的 tt 向量缺少第一个括号 tt <- c(...)。 - user2004820
1个回答

3
首先,将您的 xx 对象与一个包含您断点的空 xts 对象合并。
xs <- merge(xx, xts(,as.POSIXct(spltr)))

然后,您可以使用 [.xts 函数的 which.i 参数,在 xs 中找到您的 spltr 对象的 'endpoints'。

ep <- c(0,xs[as.POSIXct(spltr),which.i=TRUE])

现在你可以在xs对象上使用period.apply(确保处理任何可能的NA)。
> period.apply(xs, ep, function(x) nrow(na.omit(x)))
                    xx
2014-01-13 12:09:32  0
2014-02-09 06:23:41  0
2014-03-01 13:35:12 13
2014-05-14 07:12:52 13

如果你和我一样对 which.i 感到困惑,那么可以查看 ?"[.xls"。第一次阅读这个时...实际上,在帮助文件中还有许多其他的 [. 示例。 - sdittmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接