Удаление дат с менее чем полными наблюдениями

У меня есть объект 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") 

но это все равно вернул полный набор

Спасибо


person number8    schedule 15.06.2012    source источник


Ответы (1)


Разделить по дням. Подсчитывайте количество строк каждый день и оставляйте только те, у которых более 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]]). NULLs не будут агрегированы, поэтому вы останетесь с одним объектом xts, который пропускает дни с менее чем 288 строками.

person GSee    schedule 15.06.2012
comment
Привет, спасибо за это. к сожалению, код у меня не запускается. Я получаю сообщение об ошибке. Привет, спасибо. к сожалению, код у меня не запускается. Я получаю сообщение об ошибке: @GSee, пожалуйста, смотрите ниже, спасибо - person number8; 15.06.2012
comment
Да, уже несколько раз. Я прокомментировал ниже, так как я не знаю, как писать код в этой части #new - person number8; 15.06.2012
comment
Я опустил закрывающую скобку. Кроме того, я думаю, что ему нужно >= 288 вместо > 288, поскольку в 24 часа есть только 288 5-минутных периодов. Отредактировано. А теперь работает? - person GSee; 15.06.2012
comment
когда я запускаю неожиданный символ аргумента daylist в:} source ›source ('~ / .active-rstudio-document', echo = TRUE) Ошибка в источнике (~ / .active-rstudio-document, echo = TRUE): ~ / .active-rstudio-document: 62: 1: неожиданный символ 61:} 62: do.call ^ Есть ли разница в том, что 'x' используется в двух аргументах, поскольку 'x' в первом коде указывает только на определенные однажды в моем наборе данных. А также имеет значение, что каждый день имеет ровно 288 точек данных, поэтому аргумент должен быть следующим: if (NROW (x) = 288) - person number8; 15.06.2012
comment
Я добавил данные, чтобы код можно было воспроизвести. Я не получаю сообщения об ошибке. Если вы получаете сообщение об ошибке с вашими данными, предоставьте дополнительную информацию о ваших данных (dput или str) - person GSee; 15.06.2012
comment
getdat (euru) - ›файл dollar ## csv ;; zz1 ‹- read.zoo (доллар, sep =, формат =% d /% m /% Y% H:% M, tz =, FUN = NULL, обычный = TRUE, header = TRUE, index.column = 1, colClasses = c (символьный, числовой)) ;; dxts ‹- as.xts (zz1) - person number8; 15.06.2012
comment
Извините: str (dxts) Объект 'xts' с 18:00:00 2011-11-13 по 23:55:00 2012-05-27, содержащий: Data: num [1: 41502, 1] 1,38 1,38 1,38 1,38 1,38 ... Проиндексировано объектами класса: [POSIXct, POSIXt] TZ: xts Атрибуты: Список из 2 $ tclass: chr [1: 2] POSIXct POSIXt $ tzone: chr - person number8; 15.06.2012
comment
Здорово! Установите флажок, чтобы принять этот ответ, если он отвечает на ваш вопрос. Спасибо. - person GSee; 15.06.2012
comment
Привет, действительно извиняюсь за беспокойство, но не могли бы вы быстро взглянуть на оставшийся без ответа вопрос в моем профиле? Вы, кажется, обладаете знаниями здесь, и я был бы очень признателен, если бы вы могли бегло взглянуть. Я действительно думаю, что это всего лишь небольшая корректировка, но я не уверен, что, потому что мне нечего делать? благодаря. Я думаю, что у меня есть все, что касается моей проблемы, но мне кажется, что никто не может мне ответить - person number8; 18.06.2012