Я новый пользователь 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
, чтобы функция возвращала каждую отфильтрованную серию, используя все доступные наблюдения этой серии.