Я заметил странное поведение xts при попытке разделить объект, который уходит далеко в прошлое. Поведение раскола меняется в эпоху.
#Create some data
dates <- seq(as.Date("1960-01-01"),as.Date("1980-01-01"),"days")
x <- rnorm(length(dates))
data <- xts(x, order.by=dates)
Если мы разделим объект xts по неделям, он определяет последний день недели как понедельник до 1970 года. После 1970 года он определяет его как воскресенье (ожидаемое поведение).
#Split the data, keep the last day of the week
lastdayofweek <- do.call(rbind, lapply(split(data, "weeks"), last))
head(lastdayofweek)
tail(lastdayofweek)
Это кажется проблемой только в течение нескольких недель, а не месяцев или лет.
#Split the data, keep the last day of the month
lastdayofmonth <- do.call(rbind, lapply(split(data, "months"), last))
head(lastdayofmonth)
tail(lastdayofmonth)
Поведение, похоже, связано со следующим, хотя я не уверен, почему оно применимо только к неделям. Из крана xts.
Для дат до эпохи (1970-01-01) время окончания выровнено по 59.0000 секундам. Это связано с ошибкой/функцией в реализации R asPOSIXct и mktime0 на уровне исходного кода C. Это ограничивает точность диапазонов до 1970 года до 1-минутной детализации с текущим обходным решением xts.
Мой обходной путь заключался в том, чтобы сдвинуть даты перед разделением объектов для данных до 1970 года, если я разбиваю по неделям. Я ожидаю, что у кого-то есть более элегантное решение (или способ избежать ошибки).
РЕДАКТИРОВАТЬ: Чтобы было ясно, в чем вопрос, я ищу ответ, который а) указывает, почему это происходит (чтобы я мог лучше понять природу ошибки и, следовательно, избежать ее) и/или б) лучший обходной путь разобраться с этим.