无法将 data.frame 对象转换为 xts 对象:给出 POSIXlt 错误。 (右)

Can't convert data.frame object to xts object: Gives POSIXlt error. (R)

我正在尝试将源自 .csv 的 data.frame 对象转换为 xts 对象。它没有正确转换为 xts 对象,而是给出了错误:

Error in as.POSIXlt.character(x, tz, ...) : character string is not in a standard unambiguous format

我尝试将日期列更改为 class 日期,但无济于事。这是代码:

library(xts)
mydata <- read.csv("https://sites.google.com/site/jonspinney/home/mba-6693-2017/edhec.csv?attredirects=0&d=1",header=TRUE,sep=",")
mydata$Date <- as.POSIXlt(mydata$Date, format = "%m/%d/%Y")
mydata <- as.xts(mydata)
class(mydata$Date)
class(mydata)

当您在数据框上调用通用函数 as.xts 时,将调用 xts:::as.xts.data.frame。默认情况下,它期望数据框的 row.names 为 DateTime,而 mydata 的第一列为 DateTime,而 row.names(mydata) 给出 1, 2, 3, 4, ... 这当然不是要转换的 as.POSIXltas.POSIXct 的可识别字符串格式。

由于您已经将Date列设置为DateTime格式(POSIXlt格式),您可以直接使用xts

oo <- xts(mydata[-1], mydata[[1]])

str(oo)
#An ‘xts’ object on 1993-12-31/2015-11-30 containing:
#  Data: num [1:264, 1:9] 100 100.4 100.5 99.5 97 ...
# - attr(*, "dimnames")=List of 2
#  ..$ : NULL
#  ..$ : chr [1:9] "CA" "SB" "EM" "EMN" ...
#  Indexed by objects of class: [POSIXlt,POSIXt] TZ: 
#  xts Attributes:  
# NULL

class(oo)
#[1] "xts" "zoo"

您可以使用 read.zooas.xts 将其设为 one-liner:

myData <- as.xts(read.zoo("https://sites.google.com/site/jonspinney/home/mba-6693-2017/edhec.csv?attredirects=0&d=1",header=TRUE,sep=",", format = "%m/%d/%Y" ))

> str(myData)
An ‘xts’ object on 1993-12-31/2015-11-30 containing:
  Data: num [1:264, 1:9] 100 100.4 100.5 99.5 97 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:9] "CA" "SB" "EM" "EMN" ...
  Indexed by objects of class: [Date] TZ: UTC
  xts Attributes:  
 NULL