Rblpapi,取消列出data.frame zoo xts

时间:2016-03-01 20:47:31

标签: r dataframe xts zoo

使用Rblpapi,我获得了包含多个列表的data.frame中3个索引的stockdata。 然后,我希望以动物园或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

取消使用(date,pricingata1,pricingata2,pricingata3)获取一个data.frame / zoo / xts对象

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和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需要一个   适当的基于时间的对象

1 个答案:

答案 0 :(得分:0)

我相信您需要的是按日期加入每个列表元素。

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

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

然后您可以通过成对merge或使用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)