如何在R中合并3个时间序列?

时间:2016-04-23 21:42:23

标签: r dataframe merge xts read.csv

我真的很新,我是像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)

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我认为您遇到的问题是,xts的{​​{1}}时间index有{&#34; PST&#34;时区附加到它。您可以使用zamkniecie3进行转换,然后成功合并。

as.Date

答案 1 :(得分:1)

问题在于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"))