如何缩短具有不同日期的多个时间序列?

时间:2019-04-30 17:20:32

标签: r date merge xts

我正在使用从不同提供商获得的时间序列数据。这导致向量的长度不匹配的事实。

例如:

nrow(xts_ret)       #2176
nrow(xts_trade)     #2177
nrow(xts_trans)     #2192
nrow(xts_vola_ret)  #2177

我还有一个仅包含因素的时间序列:

> head(xts_sentiment)

           [,1]      
2019-04-29 "neutral" 
2019-04-29 "negative"
2019-04-29 "neutral" 
2019-04-29 "neutral" 
2019-04-29 "neutral" 
2019-04-29 "neutral" 

注意:以上所有矢量都被格式化为“ xts”对象。

此设置的主要问题是xts_ret,xts_trade,xts_trans,xts_vola_ret和xts_​​sentiment的日期因变量而异。

我正在使用R版本3.5.1(2018-07-02)。

我发现xts的“合并”命令完全符合我的需求

data_pool <- merge(xts_ret, xts_trade, xts_trans, xts_vola_ret)

如果缺少一个日期(或值),则将其在相应向量中的条目替换为“ NA”,但在具有相应日期的行中列出该条目。

> head(data_pool)

               xts_ret xts_trade xts_trans xts_vola_ret
2013-04-28          NA        NA     40986           NA
2013-04-29  0.04805079         0     50009   0.00000000
2013-04-30 -0.04805079         0     48795  -0.04516775
2013-05-01 -0.14532060         0     50437  -0.13931143
2013-05-02 -0.12327888         0     57278  -0.12424083
2013-05-03 -0.12792566         0     55859  -0.12770457

“ complete.case”功能使我可以踢出所有带有“ NA”条目的行,以便所有向量具有相同的长度。

问题:

如果我将xts_sentiment矢量添加到我的pool变量中,则它仅包含“ NA”值,而“ complete.cases”将删除数据集的每一行。

如果我看一下xts_sentiment变量本身(见上文),它包含正确的值。

我还尝试在“合并”命令中设置“ as.character(xts_sentiment)”或“ as.string(xts_sentiment)”,但这无济于事。

有人知道如何将xts_sentiment的值放入“ pool”变量中吗?

顺便说一句:我还尝试了data.table,它显示了xts_sentiment及其所有值,但是我没有“唯一”日期的好处。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我的问题的解决方法是:

变量xts_sentiment由字符组成。

XTS函数用作矩阵,这意味着每个向量都需要相同的内容(例如,所有向量仅包含字符或所有向量仅包含数字)。

因此,不可能从字符向量和带数字的向量中创建xts元素。

我的解决方案是将情感水平解码为数字,然后使用“ merge.xts”命令。可行。