2013-09-28 8 views
0

Мне интересно, есть ли какие-либо быстрые R-функции, которые могут вычислять стандартное отклонение качения по вектору, и пропускать любые значения NA в середине указанного вектора, поэтому вектор все еще выравнивается с исходными данными?В R, стандартное отклонение, которое может пропустить значения NA?

В пакете TTR есть runSD, но он возвращает ошибку, если в середине вектора есть NA.

В пакете fTrading есть rollVar, у которого есть na.rm=TRUE. Взятие квадратного корня из дисперсии качения дает стандартное отклонение. Тем не менее, он фактически удаляет значения NA, а это означает, что стандартное отклонение от прокатки больше не совпадает с исходными данными.

Или есть способ временно удалить значения NA, а затем вставить их обратно при выполнении расчета?

Update

См Re-inserting NAs into a vector.

+0

возможно дубликат [Re-вставки Nas в вектор] (http://stackoverflow.com/questions/3908831/re-inserting-nas-into-a-vector) – Frank

ответ

2

Это вы что искали?

library(zoo) 
set.seed(1) 
x <- sample(c(1:3, NA), replace = TRUE, size = 10) 
r <- rollapply(data = x, width = 3, FUN = sd, fill = NA) 
r 
+0

Brilliant, это похоже на работу Что ж. – Contango

+0

Рад слышать, что это сработало. Но вы не получите большую часть 'sd' с шириной окна 1. – Henrik

+0

Да, я это понял и изменил свой комментарий :) – Contango

0

Код, кажется, работает хорошо.

Рассчитайте результат с помощью na.omit(X), затем верните значения NA, используя приведенную ниже функцию. В приведенном ниже коде используется квадратный корень, однако вы можете использовать любую функцию, включая runSD.

# Inserts NA back into result, based on a "template" (a vector with existing NA values) 
ReNA <- function(NAtemplate,result) 
{ 
    NAtemplate[!is.na(NAtemplate)]<-result;NAtemplate 
} 

X=c(4,9,NA,16,NA) 
X  
[1] 4 9 NA 16 NA 
result <- sqrt(na.omit(X)) 
X=ReNA(X,result) 
X 
[1] 2 3 NA 4 NA 
# These values are the square root of the previous, with NA values inserted back in. 

 Смежные вопросы

  • Нет связанных вопросов^_^