将factor列添加到xts对象

时间:2013-08-02 09:52:03

标签: r xts

使用unique命令,我可以轻松地从原始每日库存数据中获取唯一代码列表。结果如下:

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 个答案:

答案 0 :(得分:2)

您的xts是一个数字矩阵。矩阵中不能包含多种类型(数字和因子)。该因子被强制为一个因子(如已经评论过的),只有一个类型(这里是数字)。

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

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

但你为什么要这样做呢?你失去了xts处理时间序列的所有能力和效率。