1

我有一个 xts 对象,它涵盖了 169 天的高频 5 分钟定期观察,但在某些日子里缺少观察,即少于 288 个数据点。如何删除这些以便只有几天的完整数据点?

在数据中查找日期

ddx = endpoints(dxts, on="days");
days = format(index(dxts)[ddx], "%Y-%m-%d");


for (day in days) {
  x = dxts[day];
  cat('', day, "has", length(x), "records...\n");
}

我试过

RTAQ::exchangeHoursOnly(dxts, daybegin = "00:00:00", dayend = "23:55:00") 

但这仍然返回了全套

谢谢

4

1 回答 1

2

按天分割。统计每天的行数,只保留超过288行的。

dxts <- .xts(rnorm(1000), 1:1000*5*60)
daylist <- lapply(split(dxts, "days"), function(x) {
    if(NROW(x) >= 288) x
})
do.call(rbind, daylist)

以上dxts按“天”划分。然后,如果行数大于 288,则返回当天的所有数据,否则返回NULL. 所以,daylist将是一个列表。它的元素要么是xts对象,要么是NULL. 该do.call部分将rbind在列表中调用。这就像调用rbind(daylist[[1]], daylist[[2]], ..., daylist[[n]]) The NULLs 不会被聚合,所以你会留下一个 xts 对象,它省略了少于 288 行的天数。

于 2012-06-15T14:17:53.373 回答