将每日日期向量转换为R中的星期

时间:2018-06-20 00:57:05

标签: r xts zoo

我是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

由于我不确定下一步该怎么做,所以我将不胜感激。

2 个答案:

答案 0 :(得分: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

stocks.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

答案 1 :(得分:0)

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

使用?to.period查看帮助,它期望打开,低,高,关闭数据。

将示例中的日期转换为每周的日期将无济于事,因为它们相距一个月。

尝试

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

我希望这足以为您提供帮助。如果没有,我会帮助您了解您的问题。