時間序列
將每日簡單回報轉化為每週
我正在嘗試將每日簡單收益轉換為每週收益。我正在使用以下 R 程式碼:
library(zoo) tt <- seq(Sys.Date(), by='day', length=365) vals <- data.frame(A=runif(365), B=rnorm(365), C=1:365) z <- zoo(vals, tt) week <- function(x)format(x, '%Y.%W') dailytoweekly <- function(x) (prod(x+1)-1) aggregate(z, by=week, FUN=dailytoweekly)
基於這篇文章:https ://stackoverflow.com/questions/16442396/convert-daily-to-weekly-monthly-data-with-r 。
該函式
dailytoweekly
是根據簡單返回的時間加性屬性編寫的。令我困惑的是結果:2015.50 19.7687016 -0.88561787 5.039000e+03 2015.51 19.8390703 -1.21981217 1.729728e+07 2015.52 4.9931289 -1.76381705 7.343900e+04 2016.00 2.2251422 2.98725821 7.979000e+03 2016.01 15.9745238 -1.33997280 5.967562e+09 2016.02 15.3588303 -0.91805535 3.389158e+10
為什麼結果中有第 0 週,它應該代表什麼?因為總共有 53 週,指數從 0 到 52(含)。對此問題的任何幫助將不勝感激:)
為什麼結果中有第 0 週,它應該代表什麼?
答案在
?strptime
:‘%W’ 以十進制數 (00-53) 表示的一年中的一周,使用星期一作為一周的第一天(通常將一年中的第一個星期一作為第 1 週的第 1 天)。英國公約。
也許您期待其他格式之一的輸出?
‘%U’ 以十進制數 (00-53) 表示的一年中的星期,使用星期日作為一周的第一天(通常將一年中的第一個星期日作為第一周的第一天)。美國公約。
‘%V’ 按照 ISO 8601 中定義的十進制數 (01-53) 表示一年中的第幾週。如果包含 1 月 1 日的那一周(從星期一開始)在新年中有四天或更多天,則將其視為第 1 週。否則,它是上一年的最後一周,下一周是第 1 週。(接受但在輸入時忽略。)
你可以試試看
xts::apply.weekly
能否解決你的問題。使用它將避免您的問題中的問題。