我要么误解文档,要么对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
我确信我可以截断时间组件,但我很好奇我做错了什么。
答案 0 :(得分:1)
这已在R-forge的r613中修复。 xts:::.drop.time
正在类属性的第一个位置查找虚拟POSIXt
类,但是(在某些时候)已切换POSIXct
和POSIXt
类的顺序在基地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
感谢报告和示例!