[英]How can I merge 3 time series in R?
我在这里真的很新,并且在像R这样的编程语言上真的很新。我想下载3个时间序列,从每个时间列中选择2列(日期和收盘价),然后将它们合并为一个。 合并它们是我的问题-某些日期的复制如下:
我尝试使用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)
谢谢你的帮助!
我认为您遇到的问题是zamkniecie3
xts
时间index
附加了“ PST”时区。 您可以将其转换为as.Date
,然后成功合并。
index(zamkniecie3) <- as.Date(index(zamkniecie3))
#MERGE! into one
all.in.one <- merge(zamkniecie1, zamkniecie2, zamkniecie3)
问题是Quandl
和getSymbols
都返回带有Date
分类索引的xts对象,但是您使用POSIXct
分类索引创建EUR
。
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.POSIXct
as.Date
调用as.POSIXct
为as.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"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.