我正在尝试使用tidyverse的传播函数将宽数据帧转换为长数据帧。但是,当我应用该函数时,只有第一个键获取值,其余键接收到NA。
这是我的10只股票的代码。提取数据大约需要30秒。
library(tidyverse)
library(BatchGetSymbols)
tickers = c("IBB", "QQQ", "SPY", "XLK", "EFA", "EEM", "XLY", "XLP", "XLF",
"XLE","XLU", "XLV"
)
l.out = BatchGetSymbols::BatchGetSymbols(tickers = tickers,
first.date = "2017-01-01",
last.date = Sys.Date()
)
data = l.out$df.tickers
head(data)
price.open price.high price.low price.close volume price.adjusted ref.date ticker
1 89.12000 90.25000 88.90667 90.08 3725100 89.57880 2017-01-03 IBB
2 90.20667 92.90667 90.20667 92.41 6222900 91.89584 2017-01-04 IBB
3 92.84333 93.14333 91.87666 92.70 3709200 92.18421 2017-01-05 IBB
4 93.28000 93.83000 92.79000 93.42 4624500 92.90020 2017-01-06 IBB
5 94.05334 95.00000 93.39667 94.76 4605600 94.23276 2017-01-09 IBB
6 95.18667 95.72334 94.14000 95.50 4728900 94.96864 2017-01-10 IBB
ret.adjusted.prices ret.closing.prices
1 NA NA
2 0.025865943 0.025865919
3 0.003138075 0.003138113
4 0.007766927 0.007767001
5 0.014343973 0.014343867
6 0.007809227 0.007809181
我想将新列作为股票报价名称,并将ret.adjusted.prices作为值。 运行以下代码后,您将看到大多数列都具有NA。
df = data %>% spread(key = ticker, value = ret.adjusted.prices)
我希望将NA替换为正确的ret.adjusted.prices值。
谢谢。