我是一名新的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
中将函数应用于数据集的每一列,以便该函数使用该系列的所有可用观测结果返回每个已过滤系列。