删除少于完整观察的日期

时间:2012-06-15 13:42:59

标签: r xts missing-data

我有一个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") 

但仍然返回完整的

由于

1 个答案:

答案 0 :(得分: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]]) NULL将不会被聚合,因此您将留下一个xts对象,该对象省略了少于288行的日期。