- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我似乎无法获取 to.weekly
和 endpoints
(由 to.weekly
使用)函数在 xts 中为我提供大多数类型的日期数据的正确的一周结束日期。我在使用 xts 包的 CRAN 和 R-Forge 版本时都遇到过这个问题。
这似乎与此处讨论的问题相似但不完全相同:XTS to.weekly returns different weekly endpoints 。
对于我拥有的示例数据,to.weekly
函数在不同周的周五和周一使用默认的 indexAt="endof"
,在周二使用 indexAt="startof"
。
我使用的是 S&P 500 指数的每日返回:
library(quantmod)
getSymbols("^GSPC", from="1961-12-15", to="1962-01-15", src="yahoo")
weekdays(index(to.weekly(GSPC))) # Fridays and mondays
[1] "Monday" "Friday" "Friday" "Monday" "Monday"
我尝试将对象的时区从我的时区更改为 UTC,将我的系统时区更改为 UTC 和我的本地时区,并使用转换为 POSIXct 的原始日期重新创建 xts 对象。我的所有尝试都没有成功。
我发现从 to.weekly
获得我期望的行为的唯一方法是创建一个日期向量作为字符串,然后将它们转换为 POSIXct 而不是要使用的 Date作为新 xts 对象的索引。不幸的是,我无法让它与我的实际数据一起工作。
dates <-
c("1961-12-15","1961-12-18","1961-12-19","1961-12-20","1961-12-21","1961-12-22",
"1961-12-26","1961-12-27","1961-12-28","1961-12-29","1962-01-02","1962-01-03",
"1962-01-04","1962-01-05","1962-01-08","1962-01-09","1962-01-10","1962-01-11",
"1962-01-12","1962-01-15")
data <- rep(1, length(dates))
p <- xts(data, order.by=as.POSIXct(dates))
d <- xts(data, order.by=as.Date(dates))
# Last day in the week, as expected
weekdays(index(to.weekly(p)))
# [1] "Friday" "Friday" "Friday" "Friday" "Friday" "Monday"
# First day in the week, as expected
weekdays(index(to.weekly(p, indexAt="startof")))
# [1] "Friday" "Monday" "Tuesday" "Tuesday" "Monday" "Monday"
# Mix of first and last days, not expected
weekdays(index(to.weekly(d)))
# [1] "Monday" "Friday" "Friday" "Monday" "Monday"
由于日期的 POSIXct 值似乎适用于字符值,因此我想我应该尝试使用价格数据。
GSPCp <- xts(coredata(GSPC), order.by=as.POSIXct(index(GSPC)))
weekdays(index(to.weekly(GSPCp))) # Not as expected
[1] "Monday" "Friday" "Friday" "Monday" "Monday"
我怀疑问题是时区(和缺乏经验)问题,但我已经用尽了我能想到的所有方法来让它返回该数据系列每周结束时的值。
我当前正在运行 xts_0.9.874。
------编辑------
正如 WaltS 在下面指出的,这似乎是由于 POSIXct 使用 Unix 时间(从 1970 年 1 月 1 日开始)这一事实造成的问题。在此时间之前的日期可能会出现奇怪的行为。
我今天做了一些实验,添加了 17 年和 4 个闰日,将指数转移到 1978-1979 年,该指数与 1961-1962 年共享一周中的相同日期。果然,to.weekly
对于转移到 1970 年之后某个点的相同数据效果很好。
d <- GSPC
index(d) <- index(d)+365*17+4 # 1978-1979
weekdays(index(to.weekly(d)))
[1] "Friday" "Friday" "Friday" "Friday" "Friday" "Monday"
由于这似乎是使用 POSIX 时间的固有品质,因此我认为这不是我使用 to.weekly
或 endpoints
的问题不再是这样,而是时间格式的结构性问题。我需要找到一种不同的方法来识别 1970 年之前日期的周端点。
最佳答案
我同意 Quantmod 数据看起来不错。 to.weekly() 似乎也适用于 GSPC 等 xts 对象。你遇到的问题似乎是即 1970-01-01 被用作 POSIXct 时间的原点。为了更好地说明这一点,请考虑示例
GSPC1970 <- getSymbols("^GSPC", from="1970-12-15", to="1971-03-19", src="yahoo", auto.assign=FALSE)
to.weekly(GSPC1970)
weekdays(index(to.weekly(GSPC1970)))
[1] "Friday" "Thursday" "Thursday" "Friday" "Friday" "Friday" "Friday" "Friday" "Friday" "Friday" "Friday" "Friday"
[13] "Friday" "Friday"
输出符合预期。特别是,将 1969 年跨越到 1970 年
GSPC1969 <- getSymbols("^GSPC", from="1969-11-15", to="1970-03-20", src="yahoo", auto.assign=FALSE)
to.weekly(GSPC1969)
weekdays(index(to.weekly(GSPC1969)))
[1] "Monday" "Monday" "Monday" "Monday" "Monday" "Monday" "Friday" "Friday" "Friday" "Friday" "Friday" "Friday" "Friday" "Friday"
[15] "Friday" "Friday" "Friday" "Friday"
周一返回为 1969 周的周结束,而周五则为 1970 周的日期。问题可能出在 on =“weeks” 以及可能其他时间段的 endpoints() 上。您是否有必要使用 1970 年之前的数据?
-----------更新--------------
我认为问题更多在于端点()或其使用的函数,而不是更基本的东西。无论如何,下面的函数 to.weekly.df() 是 to.weekly() 的替代方法,它将 Quantmod 数据从 xts 对象转换为以日期为列的数据框。它还添加了一列,其中包含从 1970 年 1 月 1 日开始计算周数的周数,并将星期日作为一周的第一天。它使用周数将数据帧拆分为周,然后应用以获取每周的摘要数据并将其作为数据帧返回。还有一个小的辅助函数可以将 xts 数据转换为 data.frame。
xts2df <- function(xts_data) data.frame(date=index(xts_data),coredata(cbind(xts_data, week=(as.numeric(index(xts_data))+5)%/%7)))
to.weekly.df <- function(xts_data) {
df <- xts2df(xts_data)
weekly <- t(sapply(split(df, df$week),
function(x) c(date=tail(x$date,1), Open=x[1,2], High=max(x[,3]),
Low=min(x[,4]), Close=tail(x[,5], 1),
Volume=sum(x[,6]), Adjusted=tail(x[,7],1) ) ) )
weekly <- data.frame(date=as.Date(weekly[,1]), weekly[,-1])
return(weekly)
}
对于 1970 年 1 月 1 日之后的数据,这似乎给出了与 to.weekly() 相同的结果,以及在此之前的时间段的正确结果。如果您有任何疑问,请告诉我。
关于r - xts to.weekly 返回周五和周一作为一周结束时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28310407/
我目前正在尝试根据 unix 时间戳计算/打印出本周(周一至周日)我的数据库中有多少条记录。 我尝试了以下操作,但似乎只是为我打印出 0(所以有些地方不对) $sql = " SELECT count
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我试图显示生日在本周(周一至周日)内的所有用户。在到处搜索后,我得到了这个,但它也显示了上周和本周的用户。 SELECT * FROM teachers WHERE WEEK(birthday, 0)
因此,对于开始日期和结束日期,我想确定这两个日期之间一周中有多少天。 那么有多少个星期一、星期二等 我知道我可以通过在开始日期和结束日期之间循环并每天检查来做到这一点,但差异可能会很大。我更喜欢不需要
我有一个 MySQL 数据库,并在我们公司的本地 Web 应用程序中使用 PHP。我正在尝试制作一个几乎完成的小统计页面。但我想添加另一个字段,显示在周一至周日等日子输入了多少数据。 我试了很多,都没
我有一个名为 'transactions' 的数据库表,其中包含字段 'actualdate',其中每一行的日期都保存为 2014-09-13. 我正在使用此查询显示结果: "SELECT id,ac
在周模式的列标题中,我需要显示(dayName,dayNumber)格式。我为此使用“columnHeaderHtml”方法,但我不知道如何获取正确的dayNumber。 为了显示 dayName,我
我是一名优秀的程序员,十分优秀!