使用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”,根据上面的代码值。
我错过了什么?
答案 0 :(得分:2)
您的xts
是一个数字矩阵。矩阵中不能包含多种类型(数字和因子)。该因子被强制为一个因子(如已经评论过的),只有一个类型(这里是数字)。
作为一种解决方法,您可以先将xts对象强制转换为data.frame。
my.daily <- as.data.frame(my.daily)
my.daily[,1] <- code
但你为什么要这样做呢?你失去了xts
处理时间序列的所有能力和效率。