【问题标题】:Convert daily date vector to weeks in R将每日日期向量转换为 R 中的周数
【发布时间】:2018-06-21 15:52:40
【问题描述】:

我是 R 新手,我想知道如何将每日数据向量转换为每周数据向量。我的代码如下:

library("quantmod")
library("xts")
library("zoo")
library(corrplot)

stock.data <- read.csv2("stocks.csv", sep = ";")
dates <- as.Date(stock.data[,"Date"], format = "%d/%m/%Y")

到目前为止,dates是一个带有每日数据信息的向量,stock.data如下:

       Date       SPMILA       COLCAP     SPBLPGPT
   1 2/01/2008 -0.002964527 -0.005017742 -0.011225818
   2 3/01/2008  0.002456592 -0.002821731  0.017459207
   3 4/01/2008 -0.019060974 -0.002886772 -0.002871815
   4 7/01/2008 -0.010540054            0 -0.007413185

我尝试按如下方式将我的数据转换为每周:

dates = to.weekly(dates, OHLC = FALSE)

但我得到了错误:Error in period.apply(x, ep, FUN, ...) : argument "FUN" is missing, with no default

我还尝试将我的stock.data 转换为每周,看看是否可以通过这种方式获取日期:

stock.data <- to.weekly(stock.data, OHLC = FALSE)

然后我收到错误Error in try.xts(x) : Error in as.POSIXlt.character(x, tz, ...) : character string is not in a standard unambiguous format

如果我不确定下一步该尝试什么,我将不胜感激。

【问题讨论】:

  • 请发布stock.data$Date的子集
  • 首先要做的是edit 你的问题包括一个library 调用来加载所需的包和数据来构建一个有效的例子。由于新用户对此类请求的响应率处于历史低位,因此投票结束,但如果您回复以改进问题,我可以撤销该投票。
  • 您好,感谢您的评论,我编辑了问题。如果还有其他事情要做,请告诉我。

标签: r xts zoo


【解决方案1】:

我制作了最后显示的 /tmp/stocks.csv。诀窍是使用read.zoo,然后to.weekly() 可以使用:

z = read.zoo("/tmp/stocks.csv", format="%d/%m/%Y", sep=';', header=TRUE)
to.weekly(z, OHLC=FALSE)

这给出了:

                SPMILA       COLCAP     SPBLPGPT
2008-01-04 -0.01906097 -0.002886772 -0.002871815
2008-01-07 -0.01054005  0.000000000 -0.007413185

股票.csv:

Date;SPMILA;COLCAP;SPBLPGPT
2/01/2008;-0.002964527;-0.005017742;-0.011225818
3/01/2008;0.002456592;-0.002821731;0.017459207
4/01/2008;-0.019060974;-0.002886772;-0.002871815
7/01/2008;-0.010540054;0;-0.007413185

【讨论】:

    【解决方案2】:

    第一个错误我无能为力,但第二个错误告诉您 r 无法解释日期格式。 R 不知道您使用的是 DD/MM/YYYY 还是 MM/DD/YYYY。

    使用 ?to.period 查看帮助,它需要 Open、Low、High、Close 数据。

    将示例中的日期转换为每周不会有任何作用,因为它们相隔一个月。

    试试

    library("lubridate")
    library(xts)
    stringdates = c("2/1/2008", "3/1/2008", "4/1/2008")
    dates <- mdy(stringdates)
    values <- c(1:3)
    xtsfr <- xts( values, mdy(stringdates))
    xtsfr
    
                 [,1] 
    2008-02-01    1 
    2008-03-01    2 
    2008-04-01    3
    
    to.weekly(xtsfr)
               xtsfr.Open xtsfr.High xtsfr.Low xtsfr.Close
    2008-02-01          1          1         1           1
    2008-03-01          2          2         2           2
    2008-04-01          3          3         3           3
    
    to.yearly(xtsfr)
               xtsfr.Open xtsfr.High xtsfr.Low xtsfr.Close
    2008-04-01          1          3         1           3
    

    我希望这足以帮助你。如果不是,我会更有助于理解您的问题。

    【讨论】:

    • 您好,感谢您的帮助。应用您的代码,我得到:“警告消息:1350 无法解析”,当我尝试转换为每月数据时,我得到“xts(,order.by = x)错误:'order.by' 不能包含'NA' 、'NaN' 或 'Inf'”。我编辑了这个问题,我不小心在原帖上复制了错误的错误信息。对不起
    猜你喜欢
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 2020-06-13
    • 2021-11-10
    • 2021-04-28
    • 1970-01-01
    相关资源
    最近更新 更多