R BatchGetSymbols-重塑输出

R BatchGetSymbols-重塑输出,r,tidyr,quantmod,quantitative-finance,R,Tidyr,Quantmod,Quantitative Finance,我喜欢使用BatchgetSymbols的优点。 有什么建议我可以最好地处理输出以接收下面的格式吗 symbols_RP <- c('VDNR.L','VEUD.L','VDEM.L','IDTL.L','IEMB.L','GLRE.L','IGLN.L') #Setting price download date range from_date <- as.Date('2019-01-01') to_date <- as.Date(Sys.Date()) get.sym

我喜欢使用BatchgetSymbols的优点。 有什么建议我可以最好地处理输出以接收下面的格式吗

symbols_RP <- c('VDNR.L','VEUD.L','VDEM.L','IDTL.L','IEMB.L','GLRE.L','IGLN.L')
#Setting price download date range
from_date <- as.Date('2019-01-01')
to_date <- as.Date(Sys.Date())



get.symbol.adjclose <- function(ticker) {
    l.out <-  BatchGetSymbols(symbols_RP, first.date = from_date, last.date = to_date, do.cache=TRUE, freq.data = "daily", do.complete.data = TRUE, do.fill.missing.prices = TRUE, be.quiet = FALSE)
return(l.out$df.tickers) 
}

prices <- get.symbol.adjclose(symbols_RP)
预期输出如下:

               VTI     PUTW      VEA      VWO      TLT     VNQI    GLD      EMB      UST  FTAL
2019-01-02 124.6962 25.18981 35.72355 36.92347 118.6449 48.25209 121.33 97.70655 55.18464 45.76
2019-01-03 121.8065 25.05184 35.43429 36.34457 119.9950 48.32627 122.43 98.12026 56.01122 45.54
2019-01-04 125.8384 25.39677 36.52383 37.49271 118.6061 49.38329 121.44 98.86311 55.10592 46.63
2019-01-07 127.1075 25.57416 36.63954 37.56989 118.2564 49.67072 121.86 99.28625 54.81071 46.54
2019-01-08 128.4157 25.61358 36.89987 37.78215 117.9456 50.06015 121.53 99.21103 54.54502 47.05
2019-01-09 129.0210 25.56431 37.35305 38.33209 117.7610 50.39395 122.31 99.38966 54.56470 47.29
正如我从其他语言中了解到的,我可以使用for循环,但我知道在r中有更快的方法

也许有人能给我个提示

改进版:

get.symbol.adjclose <- function(ticker) {
    l.out <-  BatchGetSymbols(symbols_RP, first.date = from_date, last.date = to_date, do.cache=TRUE, freq.data = "daily", do.complete.data = TRUE, do.fill.missing.prices = TRUE, be.quiet = FALSE)
    return(as.data.frame(l.out$df.tickers[c("ticker","ref.date","price.open","price.high","price.low","price.close","volume","price.adjusted")]))
}

get.symbol.adjclose使用dplyr和tidyr。我选择的是价格调整,但你可以使用任何你需要的价格

library(dplyr)
library(tidyr)

prices %>% 
  select(ref.date, ticker, price.adjusted) %>% # select columns before pivot_wider
  pivot_wider(names_from = ticker, values_from = price.adjusted)

# A tibble: 352 x 7
   ref.date   GLRE.L IDTL.L IGLN.L VDEM.L VDNR.L VEUD.L
   <date>      <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
 1 2019-01-02   NA    NA      25.2   51.0   60.6   30.2
 2 2019-01-03   32.2   4.50   25.3   50.3   59.7   30.1
 3 2019-01-04   32.6   4.47   25.2   51.7   60.9   30.9
 4 2019-01-07   32.8   4.47   25.3   51.8   61.8   31.0
 5 2019-01-08   32.8   4.44   25.2   51.9   62.0   31.3
 6 2019-01-09   33.3   4.43   25.3   53.0   62.7   31.7
 7 2019-01-10   33.5   4.41   25.3   53.2   62.7   31.7
 8 2019-01-11   33.8   4.40   25.3   53.1   62.8   31.6
 9 2019-01-14   33.8   4.41   25.3   52.7   62.7   31.4
10 2019-01-15   34.0   4.41   25.3   53.1   63.1   31.4
# ... with 342 more rows
库(dplyr)
图书馆(tidyr)
价格%>%
选择(参考日期、股票代码、价格调整)%>%#选择数据透视前的列
pivot\u加宽(名称\u from=ticker,值\u from=price.adjusted)
#A tibble:352 x 7
参考日期GLRE.L IDTL.L IGLN.L VDEM.L VDNR.L VEUD.L
1 2019-01-02 NA NA 25.2 51.0 60.6 30.2
2 2019-01-03   32.2   4.50   25.3   50.3   59.7   30.1
3 2019-01-04   32.6   4.47   25.2   51.7   60.9   30.9
4 2019-01-07   32.8   4.47   25.3   51.8   61.8   31.0
5 2019-01-08   32.8   4.44   25.2   51.9   62.0   31.3
6 2019-01-09   33.3   4.43   25.3   53.0   62.7   31.7
7 2019-01-10   33.5   4.41   25.3   53.2   62.7   31.7
8 2019-01-11   33.8   4.40   25.3   53.1   62.8   31.6
9 2019-01-14   33.8   4.41   25.3   52.7   62.7   31.4
10 2019-01-15   34.0   4.41   25.3   53.1   63.1   31.4
# ... 还有342行
BatchGetSymbols中的注释:

IEMB.L输出:数据不足(thresh.bad.data=75%)

library(dplyr)
library(tidyr)

prices %>% 
  select(ref.date, ticker, price.adjusted) %>% # select columns before pivot_wider
  pivot_wider(names_from = ticker, values_from = price.adjusted)

# A tibble: 352 x 7
   ref.date   GLRE.L IDTL.L IGLN.L VDEM.L VDNR.L VEUD.L
   <date>      <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
 1 2019-01-02   NA    NA      25.2   51.0   60.6   30.2
 2 2019-01-03   32.2   4.50   25.3   50.3   59.7   30.1
 3 2019-01-04   32.6   4.47   25.2   51.7   60.9   30.9
 4 2019-01-07   32.8   4.47   25.3   51.8   61.8   31.0
 5 2019-01-08   32.8   4.44   25.2   51.9   62.0   31.3
 6 2019-01-09   33.3   4.43   25.3   53.0   62.7   31.7
 7 2019-01-10   33.5   4.41   25.3   53.2   62.7   31.7
 8 2019-01-11   33.8   4.40   25.3   53.1   62.8   31.6
 9 2019-01-14   33.8   4.41   25.3   52.7   62.7   31.4
10 2019-01-15   34.0   4.41   25.3   53.1   63.1   31.4
# ... with 342 more rows