【问题标题】:Convert xts to data.frame将 xts 转换为 data.frame
【发布时间】:2018-06-20 20:06:02
【问题描述】:

我正在编写一个代码来从 S&P500 收集数据。我确实得到了我需要的数据,但现在我为每只股票都有一个 xts 对象,我想将其转换为一个大 data.frame,因此我可以运行事件研究或创建图表。

url <- "https://en.wikipedia.org/wiki/List_of_S%26P_500_companies"
tables <- getURL(url)

tables <- readHTMLTable(tables, stringsAsFactors = F)
sp500symbols <- tables[[1]][,1:2]
head(sp500symbols)
rm(list="tables", "url")
tix <- c(sp500symbols$`Ticker symbol`)

quantmod_list = tix
for(company in quantmod_list) {  
  try(getSymbols(company, from="2009-12-29", to="2009-12-30"))
  print(company)
}

【问题讨论】:

  • 欢迎来到 Stack Overflow!为了给您一个很好的答案,如果您还没有看过How to Ask,它可能会对我们有所帮助。如果您可以提供minimal reproducible example,它可能也很有用。

标签: r dataframe xts


【解决方案1】:

quantmod 与 xts 配合得很好。

也许使用 xts 而不是 data.frame 来存储您的市场数据。

您可以使用 merge.xts 将多个股票合并到一个大 xts 对象中。

通过 ?merge.xts 查看它 或在这里:https://www.rdocumentation.org/packages/xts/versions/0.10-1/topics/merge.xts


另外 - 我发现了这些类似的问题和答案 - 他们可能会帮助你:

最后一个给你一个列表,其中包含市场数据的 data.frame:

library(BatchGetSymbols)

first.date <- Sys.Date()-365
last.date <- Sys.Date()

df.SP500 <- GetSP500Stocks()
tickers <- df.SP500$tickers

l.out <- BatchGetSymbols(tickers = tickers,
                     first.date = first.date,
                     last.date = last.date)

print(l.out$df.control)
print(l.out$df.tickers)

【讨论】:

  • 非常感谢。最后一个代码工作正常。但我没有得到合并 xts 的想法。我的意思是我可以一个一个地编写每个 xts 以将它们加入一个 xts,但是是否有可能通过创建循环或其他东西来合并它们?
  • 我得到了我需要的东西。
【解决方案2】:
    # generates a XTS-File wich will download the adjusted stockprices on a Daily base. 
url <- "https://en.wikipedia.org/wiki/List_of_S%26P_500_companies"
tables <- getURL(url)

tables <- readHTMLTable(tables, stringsAsFactors = F)
sp500symbols <- tables[[1]][,1:2]
head(sp500symbols)
rm(list="tables", "url" )
tix <-c(sp500symbols$`Ticker symbol`)

dataEnv <- new.env()
quantmod_list = tix
for(company in quantmod_list){
  try(getSymbols(company, auto.assign = TRUE, src="yahoo", from="2018-01-01", to="2018-01-23",return.class = 'zoo', env=dataEnv))
  print(company)
}
plist <- eapply(dataEnv, Ad)
ad.Stocks <- do.call(merge, plist)  
str(ad.Stocks)

# generates the dataset "Stockreturns" 
Stockreturns <- data.frame(c(diff(log(ad.Stocks))))                       #calc. the stockreturns
write.csv2(Stockr, file = "Stockreturns.csv", row.names=FALSE, na = "")   #export the stockreturns into a csv file

【讨论】:

  • 我现在只有一个问题。由于 XTS/Zoo 项目有一个索引列来导航。我也想导出这个索引。
猜你喜欢
  • 1970-01-01
  • 2020-03-07
  • 2020-02-03
  • 2014-05-17
  • 2021-11-12
  • 2011-09-26
  • 2013-12-10
  • 1970-01-01
  • 2017-05-29
相关资源
最近更新 更多