2016-01-21 31 views
0

我有一個時間系列的期貨合約價值在R所謂的vxdata長形式。在數值從「數值」移動到「不適用」的日期,我想創建一個列出該日期的列作爲該特定合約的截止日期。我嘗試了以下公式:使用哪個指定日期

vxdata$expiration = vxdata$Dates[which(vxdata$value==NA & lag(vxdata$value)>0] 

我收到以下錯誤:

Error in '$<-.data.frame'('tmp', "expiration", value = numeric(0)) :
replacement has 0 rows, data has 452200

任何建議上一個更好的/正確的方法來執行呢?

+0

嘗試vxdata $日期[其中(vxdata $值== NA),其(滯後(vxdata $值)> 0)] – Laterow

+2

Arrrgh。對於NA來說什麼都不是「==」。學習使用'is.na' –

回答

0

使用is.na()而不是==。這裏是快速演示。

mydate <- as.Date(c('20110101','20110201','20110301',NA,NA,'NA','20110107'),format="%Y%m%d") 
expiration <- is.na(mydate)&!is.na(as.Date(c(NA, head(mydate,-1)))) 
(result <- data.frame(mydate,expiration)) 
+0

我有麻煩使用滯後函數,從來沒有使用過,很久沒有使用R ...滯後似乎只適用於timerseris數據? – freeyoung