2013-08-02 138 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

謝謝你的訣竅!我這樣做的理由是讓我把所有各種股票的結果整理爲最後一步。我使用這些數據來分析特定賬戶的交易執行情況,這意味着在無數天內可能會有很多股票。 –