to.weekly参数drop.time的问题

时间:2012-03-26 20:02:23

标签: r xts

我要么误解文档,要么对drop.time=TRUE中的to.weekly()参数有疑问。举一个简单的例子,在一些样本日常数据中添加一个时间组件,并将其推送到每周:

library(xts)
data(sample_matrix)
d <- as.xts(sample_matrix)
index(d) <- index(d)+50

w1 <- to.weekly(d, drop.time=TRUE)
head(w1,1)
                      d.Open   d.High    d.Low  d.Close
2007-01-07 00:00:50 50.03978 50.42188 49.95041 49.99185

w2 <- to.weekly(d, drop.time=FALSE)
head(w2,1)
                      d.Open   d.High    d.Low  d.Close
2007-01-07 00:00:50 50.03978 50.42188 49.95041 49.99185

文档说:

  

drop.time设置为TRUE(默认值)将转换为该系列   将时间组件包含在一个只有日期索引的组件中,如   时间指数在较低频率序列中通常没什么价值。

This question提到drop.time取决于indexClass(d)[1] == 'POSIXt',但似乎没有帮助:

indexClass(d)
[1] "POSIXct" "POSIXt"

indexClass(d) <- c('POSIXt', 'POSIXct')
w3 <- to.weekly(d, drop.time=TRUE, name=NULL)
head(w3,1)
                        Open     High      Low    Close
2007-01-07 00:00:50 50.03978 50.42188 49.95041 49.99185

我确信我可以截断时间组件,但我很好奇我做错了什么。

1 个答案:

答案 0 :(得分:1)

这已在R-forge的r613中修复。 xts:::.drop.time正在类属性的第一个位置查找虚拟POSIXt类,但是(在某些时候)已切换POSIXctPOSIXt类的顺序在基地R中。我试图使这种检查对未来的变化更加健壮。

我还让xts:::.drop.time实际更改了基础索引。它一直在设置indexClass(x) <- "Date",但基础索引仍然是原始的POSIXt次(包括日内组件)。这会导致时髦的合并。

library(xts)
data(sample_matrix)
d1 <- d2 <- as.xts(sample_matrix)
index(d1) <- index(d1)+50
D1 <- to.daily(d1)
D2 <- to.daily(d2)
head(merge(D1,D2),2)  # old behavior
            d1.Open  d1.High   d1.Low d1.Close  d2.Open  d2.High   d2.Low d2.Close
2007-01-02       NA       NA       NA       NA 50.03978 50.11778 49.95041 50.11778
2007-01-02 50.03978 50.11778 49.95041 50.11778       NA       NA       NA       NA
head(merge(D1,D2),1)  # new behavior
            d1.Open  d1.High   d1.Low d1.Close  d2.Open  d2.High   d2.Low d2.Close
2007-01-02 50.03978 50.11778 49.95041 50.11778 50.03978 50.11778 49.95041 50.11778

感谢报告和示例!