疯狂尝试创建包含xts对象的某种类型的列表/数据框。
我正在尝试循环遍历字符串向量(每个经济“代码”),并使用quantmod包中的getSymbols函数为每个字符串创建一个xts对象(长度因每个“ticker”而异)。然后我想让每个xts对象成为数据框中的一个数据点。我还计划在数据框中有一些相关的数据(比如,每个xts对象的最大日期,以及我在其他地方指定的“标题”等),但我可以自己处理。
试图创建一个xts对象列表让我疯狂。当我尝试这样的事情时,我总是得到一个字符串列表:
test <- list()
for (i in 1:length(fredTickers))
{# import Data from FRED database
# this creates a list of strings, I'm hoping for list of xts objects...
test[i] <- getSymbols(fredTickers[i],src="FRED")
# xts objects are created for each, but not assigned to the list
}
# this creates an xts object named EVANQ.
# The test2 object is just a string with value "EVANQ".
test2 <- getSymbols("EVANQ",src="FRED")
处理这些xts对象让我疯狂。我尝试了很多技巧。
感谢您的帮助。
答案 0 :(得分:7)
在文档中多次声明,默认情况下,对象被分配给全局环境,而不是显式返回。指定auto.assign = FALSE执行相反的操作。还要记住'['和'[['。
)之间的区别tickers <- c("F", "YHOO")
test <- list()
for (i in 1:length(tickers)) {
test[[i]] <- getSymbols(tickers[i], src="yahoo", auto.assign=FALSE, return.class="xts")
}
head(test[[1]])
F.Open F.High F.Low F.Close F.Volume F.Adjusted
2007-01-03 7.56 7.67 7.44 7.51 78652200 7.18
2007-01-04 7.56 7.72 7.43 7.70 63454900 7.36
2007-01-05 7.72 7.75 7.57 7.62 40562100 7.29
2007-01-08 7.63 7.75 7.62 7.73 48938500 7.39
2007-01-09 7.75 7.86 7.73 7.79 56732200 7.45
2007-01-10 7.79 7.79 7.67 7.73 42397100 7.39
class(test[[1]])
[1] "xts" "zoo"
答案 1 :(得分:-1)
不幸的是,您不能在R中使用带矩阵的字符串。矩阵数据结构是同构的,因此整个数据必须是同一个类。您需要使用数据框来完成此任务,并且您很幸运。您可以尝试使用tidyquant
包来处理多个资产。它不需要for循环,因此它可以为您节省大量代码。 tq_get()
函数负责获取股票价格。这是股票价格的一个简单例子。你可以用FRED符号做同样的事情(见下文)。
获取股票价格:
library(tidyquant)
# Get some stock prices for multiple stocks
c("FB", "GOOG", "AMZN", "NFLX") %>%
tq_get(get = "stock.prices",
from = "2013-01-01",
to = "2016-12-31")
#> # A tibble: 4,032 × 8
#> symbol date open high low close volume adjusted
#> <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 FB 2013-01-02 27.44 28.18 27.42 28.00 69846400 28.00
#> 2 FB 2013-01-03 27.88 28.47 27.59 27.77 63140600 27.77
#> 3 FB 2013-01-04 28.01 28.93 27.83 28.76 72715400 28.76
#> 4 FB 2013-01-07 28.69 29.79 28.65 29.42 83781800 29.42
#> 5 FB 2013-01-08 29.51 29.60 28.86 29.06 45871300 29.06
#> 6 FB 2013-01-09 29.67 30.60 29.49 30.59 104787700 30.59
#> 7 FB 2013-01-10 30.60 31.45 30.28 31.30 95316400 31.30
#> 8 FB 2013-01-11 31.28 31.96 31.10 31.72 89598000 31.72
#> 9 FB 2013-01-14 32.08 32.21 30.62 30.95 98892800 30.95
#> 10 FB 2013-01-15 30.64 31.71 29.88 30.10 173242600 30.10
#> # ... with 4,022 more rows
获取FRED数据:
library(tidyquant)
# Get some economic data for multiple FRED codes
c("CPIAUCSL", "A191RL1Q225SBEA", "IC4WSA") %>%
tq_get(get = "economic.data")
#> # A tibble: 691 × 3
#> symbol date price
#> <chr> <date> <dbl>
#> 1 CPIAUCSL 2007-01-01 203.437
#> 2 CPIAUCSL 2007-02-01 204.226
#> 3 CPIAUCSL 2007-03-01 205.288
#> 4 CPIAUCSL 2007-04-01 205.904
#> 5 CPIAUCSL 2007-05-01 206.755
#> 6 CPIAUCSL 2007-06-01 207.234
#> 7 CPIAUCSL 2007-07-01 207.603
#> 8 CPIAUCSL 2007-08-01 207.667
#> 9 CPIAUCSL 2007-09-01 208.547
#> 10 CPIAUCSL 2007-10-01 209.190
#> # ... with 681 more rows
有很多选项可供选择。我称之为“#34; getters&#34;”,您可以选择大多数quantmod
数据源。祝你好运!