我在R中有一个时间序列的期货合约值,称为vxdata
。在值从数字移动到“NA”的日期,我想创建一个列,将该日期列为该特定合同的到期日期。我尝试了以下公式:
vxdata$expiration = vxdata$Dates[which(vxdata$value==NA & lag(vxdata$value)>0]
我收到以下错误:
'$< - .data.frame'(' tmp ',“过期”,值=数字(0))出错:
替换有0行,数据有452200
有关更好/更正执行此方法的建议吗?
答案 0 :(得分: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))