2016-03-01 75 views
0

使用Rblpapi,我得到了一個data.frame中的3個索引的stockdata與幾個列表。 然後,我想要得到它在動物園或最好xts格式。但是,我首先必須正確取消。Rblpapi,unlist data.frame動物園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 /動物園/ XTS與(日期,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和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,格式= 「%Y%米%d」):索引具有數據行壞條目:1 2 3 4 5 6 7 8 9

錯誤XTS(DF $日期,DF $ px_last):order.by需要 適當的時間基於對象

回答

0

相信你需要的是加入每個列表元素由日期。

但是,爲此,首先您需要將所有這些變量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) 
+0

感謝這並獲得成功! –