【问题标题】:Add factor column to xts object将因子列添加到 xts 对象
【发布时间】:2013-08-03 13:10:10
【问题描述】:

使用 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”,根据上面代码的值。

请问我错过了什么?

【问题讨论】:

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

标签: r xts


【解决方案1】:

您的xts 是一个数字矩阵。矩阵中不能有多种类型(数字和因子)。该因子被强制转换为一个因子(如前所述)以具有单一类型(此处为数字)。

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

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

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

【讨论】:

  • 感谢成功!我这样做的原因是允许我整理所有各种股票的结果作为最后一步。我使用这些数据来分析特定账户的交易执行情况,这意味着在很多天里可能有很多股票。
猜你喜欢
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
相关资源
最近更新 更多