【问题标题】:How can I merge 3 time series in R?如何在 R 中合并 3 个时间序列?
【发布时间】:2016-04-23 21:42:22
【问题描述】:

我在这里真的很新,我对 R 等编程语言也很陌生。 我想下载 3 个时间序列,从它们中选择 2 列(日期和收盘价),然后将它们合并为一个。合并它们是我的问题——一些日期像这里一样被复制:

http://prntscr.com/avz7o6.jpg

我尝试使用 merge.xts() 而不是 merge() 并将 .xts 更改为 data.frame 但它不起作用。

我的代码:

#install packages quantmod i Quandl
install.packages(c("quantmod","Quandl"))
library('quantmod')
library('Quandl')

#download data (.xts) using Quandl
Wine<-Quandl("LSE/WINE",type="xts")

#download data from Yahoo!Finance (.xts)
Rennova.Health<-getSymbols("RNVA")

#download data from stooq.pl and change them into xts
data<-read.csv("http://stooq.pl/q/d/l/?s=EUR&i=d",header=TRUE)   
EUR<-xts(data[,-1],order.by=as.POSIXct(data[,1])) 

#choose closing price and name them 
zamkniecie1<-Wine$"Last Close"
zamkniecie2<-RNVA$RNVA.Close
zamkniecie3<-EUR$Zamkniecie

#MARGE! into one
all.in.one<-merge(zamkniecie1, zamkniecie2, zamkniecie3)

感谢您的帮助!

【问题讨论】:

  • merge(merge(zamkniecie1, zamkniecie2, by = "dates") , zamkniecie3, by = "dates") 是我能想到的方式,假设三个时间序列都有dates
  • 您的 prntscr 链接无效

标签: r dataframe merge xts read.csv


【解决方案1】:

我认为您遇到的问题是您的xts 时间indexzamkniecie3 附加了“PST”时区。可以用as.Date进行转换,然后合并成功。

index(zamkniecie3) <- as.Date(index(zamkniecie3))

#MERGE! into one
all.in.one <- merge(zamkniecie1, zamkniecie2, zamkniecie3)

【讨论】:

    【解决方案2】:

    问题在于 QuandlgetSymbols 都返回带有 Date 分类索引的 xts 对象,但您创建 EUR 时使用了 POSIXct 分类索引。

    Date 类没有时区,因此被视为在 UTC 时区中。 as.POSIXct 默认使用您的本地时区,因此 EUR 对象的时区与其他两个对象不同。

    这是您的代码的简化版本,它通过使用 read.zoo 避免了此问题,它正确推断从 stooq.pl 下载的 CSV 具有 Date 分类索引。

    library('quantmod')
    library('Quandl')
    # download data (.xts) using Quandl
    Wine <- Quandl("LSE/WINE", type="xts")
    # download data from Yahoo!Finance (.xts)
    RNVA <- getSymbols("RNVA", auto.assign=FALSE)
    # download data from stooq.pl and change them into xts
    EUR <- as.xts(read.zoo("http://stooq.pl/q/d/l/?s=EUR&i=d", header=TRUE, sep=","))
    # merge into one
    all.in.one <- merge(Wine[,"Last Close"], RNVA[,"RNVA.Close"], EUR$Zamkniecie)
    

    如果您只想更新违规行,则需要将您的呼叫更改为 as.POSIXctas.Date,或将 tz="UTC" 添加到您的 as.POSIXct 呼叫。

    # download data from stooq.pl and change them into xts
    data <- read.csv("http://stooq.pl/q/d/l/?s=EUR&i=d",header=TRUE)
    EUR <- xts(data[,-1], order.by=as.Date(data[,1]))
    # or:
    EUR <- xts(data[,-1], order.by=as.POSIXct(data[,1], tz="UTC"))
    

    【讨论】:

    猜你喜欢
    • 2021-02-28
    • 2013-03-05
    • 2011-10-28
    • 2019-03-04
    • 2014-10-01
    • 2016-09-01
    • 2018-07-03
    • 1970-01-01
    相关资源
    最近更新 更多