如何在R中没有TZ信息格式化Index()?

时间:2016-09-16 20:46:37

标签: r xts

我想测试xts对象的最后一行的日期是否等于当前日期。我的问题是last(index(obj))会返回Sys.Date()函数没有的时区信息。

> last(index(obj))
[1] "2016-09-16 UTC"

> Sys.Date()
[1] "2016-09-16"

我的解决方法是paste0 Sys.Date()Sys.timezone()但不优雅。有更好的解决方案吗?

# Test if we already have data
  if (last(index(obj)) == paste0(Sys.Date(), " ", Sys.timezone())) {

    next

  }

*编辑*

更多信息:

> str(obj)
An ‘xts’ object on 2013-06-01/2016-09-16 containing:
  Data: num [1:1204, 1:6] NA NA NA NA NA NA NA NA NA NA ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:6] "Open" "High" "Low" "Close" ...
  Indexed by objects of class: [POSIXct,POSIXt] TZ: UTC
  xts Attributes:  
List of 1
 $ dateFormat: chr "Date"

谢谢,

2 个答案:

答案 0 :(得分:3)

打印时区是因为index(obj)POSIXct类对象。如果要将index(obj)的输出与Sys.Date()的输出进行比较,则需要确保index的输出是Date类对象。有几种方法可以实现这一目标:

1)直接将index的输出转换为Date

as.Date(last(index(obj))) == Sys.Date()

2)将obj的整个索引转换为Date(请注意索引类当前为POSIXct):

indexClass(obj) <- "Date"
last(index(obj)) == Sys.Date()

答案 1 :(得分:0)

实际上问题来自我对象的POSIXct时间格式。使用Date转换为as.Date(last(index(obj)))解决了我的问题。