2017-03-05 56 views
3

我是R編碼新手,發現自己被卡住了。我的文件由高頻股票指數數據組成,並被轉換爲xts文件。 見下文(左列的日期和時間,右列盤中返程):日期子集xts文件

2007-01-02 09:00:00 0.000000e+00 

2007-01-02 09:01:00 2.670405e-05 

2007-01-02 09:02:00 1.387629e-03 

2007-01-02 09:03:00 -1.866841e-04 

2007-01-02 09:04:00 -3.201110e-04 

2007-01-03 09:00:00 0,0000000000 

2007-01-03 09:01:00 -1.321929e-04 

2007-01-03 09:02:00 -1.586546e-04 

2007-01-03 09:03:00 7.665975e-04 

2007-01-03 09:04:00 -5.284993e-05 

2007-01-03 09:05:00 -2.907246e-04 

我的數據越過五年,我想是500天子集,然後再轉發30天移動它一個循環。然而,循環本身並不是必需的,但是如何構造這種函數的幫助將受到高度讚賞。

我用下面的函數,在我的數據集被命名爲「DIRV」,也就是盤中回報的總和:

b<-head(DIRV, n=500) 

L<-as.Date(index(b)[1]) 

J<-as.Date(index(b)[500]) 

V<-IRV["L/J"] 

,但我得到了以下錯誤:

Error in if (length(c(year, month, day, hour, min, sec)) == 6 && c(year, : missing value where TRUE/FALSE needed

另外:警告消息:

1: In as_numeric(YYYY) : NAs introduced by coercion 2: In as_numeric(YYYY) : NAs introduced by coercion

回答

2

您的錯誤出現是因爲您嘗試對日期ti mes是字符串"L/J",它對子集操作沒有意義。另外,您應該小心,LJ不會返回NA,這可能會發生在您的數據邊界上,否則您會收到錯誤。

試試這個來避免錯誤:

if (is.na(L) || is.na(J)) stop("Not a valid date range.") 
V <-IRV[paste0(L,"/", J), ] 

你想與你的窗口來仔細地處理邊緣情況。

當你說「我想要的是500天子集,然後在循環中向前移動30天」我不完全遵循你的意思。如果您的意思是計算滾動的數據窗口,則可能可以使用rollapplyr(請參閱?rollapplyr)。

+0

非常感謝FXQuantTrader的「paste0」功能正是我一直在尋找和腳本現在工作正常。在這種情況下,我沒有得到rollapplyr的工作,因爲它要求我一分一分地而不是一天地滾動,並且因爲在某些日子裏它包含不同數量的觀測值,因此在日常數據不規則的情況下,我不能運行這個功能準確。 – Garten