2013-08-02 78 views
0

使用唯一命令,我可以很容易地从我原始的每日库存数据中获取唯一代号的列表。其结果如下:将因子列添加到xts对象

my.table <- unique(my.frame1[,5]) 
> my.table 
[1] NPN BIL CFR IMP FSR SHF SHP REI INP OML REM ABL AGL SAB WHL BTI MMI RMI PIK TRU INL SPP CLS 
[24] SBK PPC IPL SOL ASA RMH MTN ANG EXX DSY NED SLM AVI KIO VOD GFI APN 
40 Levels: ABL AGL ANG APN ASA AVI BIL BTI CFR CLS DSY EXX FSR GFI IMP INL INP IPL KIO ... WHL 

但是,我现在通过列表循环做一些基本的计算。我想分配股票代码到每个交易日,但在列表中观察预期不与我的数据交互:

> code <- my.table[2] 
> code 
[1] BIL 
40 Levels: ABL AGL ANG APN ASA AVI BIL BTI CFR CLS DSY EXX FSR GFI IMP INL INP IPL KIO ... WHL 

> my.daily <- my.daily[,3:6] 
> my.daily[,1] <- code 
> my.daily 
      my.xts...1..Low my.xts...1..Close  VWAP SIDE 
2011-08-31    7    23765 23744.30 1 
2011-09-08    7    22876 23056.72 1 
2012-02-14    7    25050 25230.52 -1 
2012-07-25    7    23480 23591.01 -1 
2013-05-12    7    26818 26737.65 -1 

现在我本来期望在我的XTS第一列的对象是“ BIL“,根据上面代码的值。

我错过了什么?

+1

可能是因为'code'是一个因素(其中'BIL'是第7级)。在尝试将其存储在'my.daily'之前将其转换为字符。 – Thomas

回答

2

您的xts是一个数字矩阵。矩阵中不能有多种类型(数字和因子)。该因素被强制为一个因素(如已评论)具有单一类型(此处为数字)。

作为一种解决方法,您可以先将您的xts对象强制为data.frame。

my.daily <- as.data.frame(my.daily) 
my.daily[,1] <- code 

但你为什么要这么做?您放弃xts处理时间序列的所有能力和效率。

+0

谢谢你的诀窍!我这样做的理由是让我把所有各种股票的结果整理为最后一步。我使用这些数据来分析特定账户的交易执行情况,这意味着在无数天内可能会有很多股票。 –