R:在一个命令中将输出从 getSymbols() 转换为数据帧,而无需显式调用对象名称

R: Converting output from getSymbols() to data frame in one command without calling the object name explicitly

我想将 quantmod 包中 getSymbols 的输出转换为数据框。目前,我使用以下代码实现了这一点。

Data <- new.env()
getSymbols(Symbols = "EUR/USD", src = "oanda", from = "2005-01-01", 
    to = "2006-01-01", env = Data)
test <- as.data.frame(Data$EURUSD)
head(test)

理想情况下,我想将这段代码缩短为以下几行:

test <- as.data.frame(getSymbols(Symbols = "EUR/USD", 
   src = "oanda", from = "2005-01-01", to = "2006-01-01"))

但这并不能正常工作:

> head(test)
  getSymbols(Symbols = "EUR/USD", src = "oanda", from = "2005-01-01", to = "2006-01-01")
1                                                                                 EURUSD

理想情况下,我希望在处理数据时避免引用 EUR/USD 对,因为将来我将努力使该组件动态化,因此必须键入 test <- as.data.frame(Data$EURUSD) 会破坏乐趣.我理想的代码会像这样工作:

test <- as.data.frame(getSymbols(Symbols = *user input*, 
   src = "oanda", from = "2005-01-01", to = "2006-01-01"))

目前我不一定对 用户输入 感兴趣,但对强制 quantmod 输出到数据框而不需要调用 quantmod 对象名称。

您可以尝试这样的操作:

userInput="EUR/USD"
test<-as.data.frame(getSymbols(Symbols = userInput, 
    src = "oanda", from = "2005-01-01",to = "2006-01-01", env = NULL))

env 设置为 NULL 不会在环境中创建数据并返回它。

tidyquant 包非常适合这种情况。你可以试试这个:

tq_get("EUR/USD", get = "exchange.rates")

如果你想在同一个数据框中有更多的货币对,试试这个:

c("EUR/USD", "EUR/JPY", "EUR/GBP") %>% 
     tq_get(get = "exchange.rates")

然后您可以使用 "tidyverse" 的所有功能,例如使用 group_by 进行分组、使用 mutate 进行变异等。此外,tidyquant 包具有专门处理时间序列数据的其他函数。