使用Spread将宽格式转换为长格式会为时间序列数据创建NA

时间:2019-07-08 01:57:53

标签: r tidyverse plyr spread

我正在尝试使用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)

enter image description here

我希望将NA替换为正确的ret.adjusted.prices值。

谢谢。

0 个答案:

没有答案