Установите день недели, который будет использоваться to.weekly - PullRequest
3 голосов
/ 27 ноября 2011

Я пытаюсь преобразовать временной ряд ежедневных данных (только рабочие дни), содержащихся в объекте xts, во временной ряд еженедельных данных. В частности, я хочу, чтобы результирующий временной ряд содержал записи на конец недели (то есть последний рабочий день недели) исходных данных. Я пытался добиться этого, используя функцию to.weekly из пакета xts.

При обсуждении другого вопроса ( Неправильная дата окончания недели с использованием функции to.weekly в пакете 'xts' ) приведенный ниже пример кода достиг именно того, что мне нужно. Однако когда я запускаю код, to.weekly использует понедельники в качестве представителя для еженедельных данных.

Мне интересно, какие глобальные настройки могут позволить мне еженедельно использовать пятницу в качестве представителя недели.

Пример кода:

library(lubridate); library(xts)   
test.dates <- seq(as.Date("2000-01-01"),as.Date("2011-10-01"),by='days')
test.dates <- test.dates[wday(test.dates)!=1 & wday(test.dates)!=7] #Remove weekends
test.data <- rnorm(length(test.dates),mean=1,sd=2)
test.xts <- xts(x=test.data,order.by=test.dates)
test.weekly <- to.weekly(test.xts)
test.weekly[wday(test.weekly, label = TRUE, abbr = TRUE) != "Fri"]

1 Ответ

0 голосов
/ 27 ноября 2011
test.dates <- test.dates[wday(test.dates)==6]
tail(wday(test.dates, label = TRUE, abbr = TRUE))
#[1] Fri Fri Fri Fri Fri Fri
#Levels: Sun < Mon < Tues < Wed < Thurs < Fri < Sat

ОК.С неустановленными требованиями, добавленными к проблеме:

require(timeDate)
require(lubridate)
 startDate <- as.Date("2000-01-03")
 endDate <- as.Date("2011-10-01")
 AllDays <- as.timeDate(seq(startDate, endDate, by="day"))
 is.wrk <- isBizday(AllDays, holidays = holidayNYSE(), wday = 1:5)
 is.wrkdt <- as.Date(names(is.wrk)[is.wrk])
 endweeks <- tapply(is.wrkdt, paste(year(is.wrkdt),week(is.wrkdt), sep = ""), max)
 head(as.Date(endweeks, origin="1970-01-01"))
#           1            2            3            4            5            6 
#"2011-01-06" "2011-01-13" "2011-01-20" "2011-01-27" "2011-02-03" "2011-02-10" 

Итак, вы хотите:

 as.Date(endweeks, origin="1970-01-01")
...