我真的很新,我是像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)
感谢您的帮助!
答案 0 :(得分:1)
我认为您遇到的问题是,xts
的{{1}}时间index
有{&#34; PST&#34;时区附加到它。您可以使用zamkniecie3
进行转换,然后成功合并。
as.Date
答案 1 :(得分:1)
问题在于Quandl
和getSymbols
都返回带有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.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"))