quantmod:buildData(,na.rm = FALSE)删除时间序列的头部

时间:2011-05-03 21:43:44

标签: r quantmod

我想从FRED系列创建数据集,我使用quantmod包,如下所示:

library(quantmod)
getSymbols(c('FEDFUNDS', 'GDPPOT', 'DGS10'), src='FRED')
dat <- buildData(FEDFUNDS ~ DGS10 + GDPPOT, na.rm=FALSE)

我需要的是一个xts对象,其中包含对最长时间序列中所有日期的观察,以及缺少值以填充较短的时间序列。在上面的例子中,我得到:

> head(dat, 2)
           FEDFUNDS DGS10 GDPPOT
1962-10-01     2.90  3.93 3141.6
1963-01-01     2.92    NA 3173.9
> head(FEDFUNDS, 2)
           FEDFUNDS
1954-07-01     0.80
1954-08-01     1.22
> head(DGS10, 2)
           DGS10
1962-01-02  4.06
1962-01-03  4.03
> head(GDPPOT, 2)
           GDPPOT
1949-01-01 1864.8
1949-04-01 1885.2

FEDFUNDS系列被截断以匹配DGS10系列的最小日期值。我喜欢buildData()函数的便利性,并且很乐意将它用于此任务,但我想知道如何保持缺失的观察结果。

非常感谢你的时间!

编辑:我不想使用合并的原因是某些数据系列具有不同的周期性,buildData()会自动处理。

2 个答案:

答案 0 :(得分:5)

您可以使用merge.xts,因为它会自动填充NA

library(quantmod)
getSymbols('FEDFUNDS;DGS10'head(, src='FRED')
dat <- merge(FEDFUNDS, DGS10)
head(dat)
#            FEDFUNDS DGS10
# 1954-07-01     0.80    NA
# 1954-08-01     1.22    NA
# 1954-09-01     1.06    NA
# 1954-10-01     0.85    NA
# 1954-11-01     0.83    NA
# 1954-12-01     1.28    NA

答案 1 :(得分:5)

buildData没有给你你想要的东西,特别是因为DGS10在假期(包括一年的第一天)NA并且周日没有任何参赛资格。因此,如果你尝试在问题中得到的东西,那么你会得到以下奇怪的东西

> tail(dat,16)
           FEDFUNDS DGS10  GDPPOT
2005-07-01     3.26  4.06 12611.7
2007-01-01     5.25    NA 13072.4
2007-10-01     4.76  4.56 13314.1
2008-01-01     3.94    NA 13393.0
2008-04-01     2.28  3.57 13471.2
2008-07-01     2.01  4.01 13547.1
2008-10-01     0.97  3.77 13619.9
2009-01-01     0.15    NA 13689.2
2009-04-01     0.15  2.68 13753.1
2009-07-01     0.16  3.55 13813.7
2009-10-01     0.12  3.21 13872.0
2010-01-01     0.11    NA 13928.2
2010-04-01     0.20  3.89 13985.8
2010-07-01     0.18  2.96 14044.7
2010-10-01     0.19  2.54 14109.8
2011-04-01     0.10  3.46 14247.2

有几行缺失,包括整个2006年。dat是一个zoo对象,而不是xts

如果您正在使用GDPPOT,那么您可能希望使用季度数据。试试这个:

FEDFUNDSq <- aggregate(na.omit(FEDFUNDS), as.yearqtr, first)
DGS10q    <- aggregate(na.omit(DGS10),    as.yearqtr, first)
GDPPOTq   <- aggregate(na.omit(GDPPOT),   as.yearqtr, first)
dat2 <- as.xts(merge(FEDFUNDSq, DGS10q, GDPPOTq))

as.xts()仅在那里因为你提出要求。这应该会给你NA你想要的地方而不是你不需要的地方。例如,以下内容看起来比早期的尾部好。

> head(tail(dat2,66),25)
        FEDFUNDSq DGS10q GDPPOTq
2005 Q3      3.26   4.06 12611.7
2005 Q4      3.78   4.39 12684.6
2006 Q1      4.29   4.37 12758.9
2006 Q2      4.79   4.88 12835.2
2006 Q3      5.24   5.15 12913.0
2006 Q4      5.25   4.62 12992.1
2007 Q1      5.25   4.68 13072.4
2007 Q2      5.25   4.65 13153.1
2007 Q3      5.26   5.00 13233.9
2007 Q4      4.76   4.56 13314.1
2008 Q1      3.94   3.91 13393.0
2008 Q2      2.28   3.57 13471.2
2008 Q3      2.01   4.01 13547.1
2008 Q4      0.97   3.77 13619.9
2009 Q1      0.15   2.46 13689.2
2009 Q2      0.15   2.68 13753.1
2009 Q3      0.16   3.55 13813.7
2009 Q4      0.12   3.21 13872.0
2010 Q1      0.11   3.85 13928.2
2010 Q2      0.20   3.89 13985.8
2010 Q3      0.18   2.96 14044.7
2010 Q4      0.19   2.54 14109.8
2011 Q1      0.17   3.36 14178.3
2011 Q2      0.10   3.46 14247.2
2011 Q3        NA     NA 14316.8