我有一个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")
但仍然返回完整的
由于
答案 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行的日期。