我是一个新的 R 用户,试图快速学习,但我自己无法破解。我主要处理经济时间序列——因此,尝试以 xts 多列格式维护我的数据集,例如:
> head(USDATAq)
tq ngdp rgdp profit
1947 Q1 0 237.2 1770.7 20.7
1947 Q2 1 240.4 1768.0 23.9
1947 Q3 2 244.5 1766.5 23.8
1947 Q4 3 254.3 1793.3 25.5
1948 Q1 4 260.3 1821.8 29.4
1948 Q2 5 267.3 1855.3 31.2
我应用hpfilter
过滤功能。在这个站点的其他地方,我发现了这个实现,它使用该coredata
函数应用于hpfilter
xts 对象:
hpfilter <- function(x, lambda=2){
eye <- diag(length(x))
dcrossprod <- crossprod(diff(eye, lag=1, d=2))
coredata(x) <- solve(eye + lambda * dcrossprod, coredata(x))
return(x)
}
我的问题是:
如何修改该函数,以便它可以处理具有 NA 观测值的变量(目前,如果有任何 NA,它会计算整个日期范围的 NA)?
我可以将数据集传递为na.omit(USDATAq)
,它可以工作,但这会将数据集中的所有变量缩减为最小观察值。但是,不同的变量在不同的日期之前可用,然后是 NA。我想最终将该函数应用于循环中的数据集的每一列mapply
,以便该函数使用该系列的所有可用观察结果返回每个过滤后的系列。