使用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需要一个 适当的基于时间的对象
答案 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)