带有chr数据的XTS对象

时间:2013-11-21 11:13:36

标签: r xts na

我只是从Bloomberg下载时间序列并尝试制作一个xts对象:

library(Rbbg)
conn <- blpConnect()
tickers = c("SPX Index","GX1 Index","VG1 Index","NK1 Index",
            "SM1 Index","RM1 Index","LT01TRUU Index")
df <- bdh(conn,tickers,c("PX_OPEN","PX_HIGH", "PX_LOW", "PX_LAST", "Volume"),
  "19980101", "20131020",option_names = "CDR", option_values = "US")
blpDisconnect(conn)

make.xts <- function(x, order.by) {
  tzone = Sys.getenv('TZ')
  orderBy = class(order.by)
  index = as.numeric(as.POSIXct(order.by, tz = tzone))
  if( is.null(dim(x)) ) {
    if( len(orderBy) == 1 )
      x = t(as.matrix(x))
    else
      dim(x) = c(len(x), 1)
  }
  x = as.matrix(x)
  x = structure(.Data = x,
    index = structure(index, tzone = tzone, tclass = orderBy),
    class = c('xts', 'zoo'), .indexCLASS = orderBy, tclass=orderBy,
    .indexTZ = tzone, tzone=tzone)
  return( x )
}

data <- new.env()
for(s in unique(df$ticker)) {
  temp = df[df$ticker == s,]
  date = as.Date(temp$date)
  temp = temp[,spl('PX_OPEN,PX_HIGH,PX_LOW,PX_LAST,Volume')]
  colnames(temp) = spl('Open,High,Low,Close,Volume')
  temp = make.xts(temp[], date)
  if (length(grep('Index',s)) == 1) {
    data[[ trim(gsub('Index', '', s)) ]] = temp[!is.na(temp$Close),]
  } else {
    data[[ trim(gsub('US Equity', '', s)) ]] = temp[!is.na(temp$Close),]
  }
}

这是df对象(抱歉,但我不知道输入) https://dl.dropboxusercontent.com/u/102669/df.rdata

这是xts对象: https://dl.dropboxusercontent.com/u/102669/temp.rdata

所有数据都是CHR,但我想要数字数据。

我认为问题是NA。 我无法删除所有NA行,因为某些时间序列只有接近的价格。

所以规则可能是:当只存在收盘价时,将所有其他列等于收盘价,否则不算。如果任何列中存在一些Na值,则执行最后一个非NA值

最终结果应该是带有数字数据的xts对象。

请帮忙吗?

1 个答案:

答案 0 :(得分:1)

保持简单,不要编写make.xts函数。

df<- xts(df[,2:7],order.by=as.Date(df[,1]))