r语言 - Rblpapi, unlist data.frame zoo xts



使用 Rblpapi,我在带有多个列表的 data.frame 中获取 3 个索引的股票数据。然后,我想以动物园或最好是 xts 格式获取它。但是,我首先必须正确取消列出。

由于不是每个人都可以访问 Rblpapi,因此无法复制,请查看 str 输出并建议我如何取消列出。

任何线索或帮助表示赞赏!

library(Rblpapi)
library(zoo)
library(xts)
str(res)

List of 3
 $ :'data.frame':   9 obs. of  2 variables:
  ..$ date   : Date[1:9], format:  ...
  ..$ PX_LAST: num [1:9] 201 194 188 190 190 ...
 $ :'data.frame':   9 obs. of  2 variables:
  ..$ date   : Date[1:9], format:  ...
  ..$ PX_LAST: num [1:9] 4891 4686 4477 4568 4517 ...
 $ :'data.frame':   9 obs. of  2 variables:
  ..$ date   : Date[1:9], format:  ...
  ..$ PX_LAST: num [1:9] 19.3 22.5 26.1 22.5 22 ...
head(res)
[[1]]
        date  PX_LAST
1 2016-01-05 201.3600
2 2016-01-12 193.6608
3 2016-01-19 188.0600
4 2016-01-26 190.2000
5 2016-02-02 190.1600
6 2016-02-09 185.4300
7 2016-02-16 189.7800
8 2016-02-23 192.3200
9 2016-03-01 197.9700
[[2]]
        date  PX_LAST
1 2016-01-05 4891.430
2 2016-01-12 4685.919
3 2016-01-19 4476.950
4 2016-01-26 4567.673
5 2016-02-02 4516.946
6 2016-02-09 4268.763
7 2016-02-16 4435.956
8 2016-02-23 4503.583
9 2016-03-01 4680.479
[[3]]
        date PX_LAST
1 2016-01-05   19.34
2 2016-01-12   22.47
3 2016-01-19   26.05
4 2016-01-26   22.50
5 2016-02-02   21.98
6 2016-02-09   26.54
7 2016-02-16   24.11
8 2016-02-23   20.98
9 2016-03-01   17.85

取消列出以获取一个 data.frame/zoo/xts 对象 (date, pricedata1, pricedata2, pricedata3)

df <- data.frame(matrix(unlist(res), nrow=9))
head(df)
     X1       X2    X3       X4    X5    X6
1 16805   201.36 16805  4891.43 16805 19.34
2 16812 193.6608 16812 4685.919 16812 22.47
3 16819   188.06 16819  4476.95 16819 26.05
4 16826    190.2 16826 4567.673 16826  22.5
5 16833   190.16 16833 4516.946 16833 21.98
6 16840   185.43 16840 4268.763 16840 26.54

但是,这不是我想要的。 列 X3 en X5 不应该在那里。加上日期格式不好。因此,将其送到动物园或 xts 不起作用:

price<-read.zoo(df, format="%Y%m%d")
df$date <-as.Date(as.character(df$date),format="%Y%m%d")
x<-xts(df$date, df$px_last)

read.zoo(df, format = "%Y%m%d") 中的错误:索引在数据行处有错误的条目:1 2 3 4 5 6 7 8 9

xts(df$date, df$px_last) 中的错误:order.by 需要 适当的基于时间的对象

我相信

您所需要的只是按日期连接每个列表元素。

但是,为此,首先您需要将所有这些变量重命名为唯一PX_LAST。例如:

require(data.table)
for (i in 1:length(res)) {
  setnames(res[[i]],"PX_LAST",paste("PX_LAST",i,sep="_"))
}

然后,您可以通过成对merge ing 或使用 plyr::join_all 函数加入:

require(plyr)
df <- join_all(res, by="date", type="full")
#         date PX_LAST_1 PX_LAST_2 PX_LAST_3
# 1 2016-01-05  201.3600  4891.430     19.34
# 2 2016-01-12  193.6608  4685.919     22.47
# 3 2016-01-19  188.0600  4476.950     26.05
# 4 2016-01-26  190.2000  4567.673     22.50
# 5 2016-02-02  190.1600  4516.946     21.98
# 6 2016-02-09  185.4300  4268.763     26.54
# 7 2016-02-16  189.7800  4435.956     24.11
# 8 2016-02-23  192.3200  4503.583     20.98
# 9 2016-03-01  197.9700  4680.479     17.85

然后最后你可以使用

include(zoo)
price<-read.zoo(df)
include(xts)
xts(df, df$date)

最新更新