2017-04-26 6 views
1
x <- 1:10 
x[6] <- NA 
x 
#[1] 1 2 3 4 5 NA 7 8 9 10 
rollapply(x, 3, mean) 
#[1] 2 3 4 NA NA NA 8 9 

移動ウィンドウ内に3つ以上のNAsがある場合は、rollapplyにNAを返すようにします。 可能ですか?rollapplyでNAを返しますか?

+1

このようなものは何ですか? (x、na.rm = T))) 'rollapply(x、3、function(x)ifelse(sum(is.na(x))> 3、NA、mean –

答えて

2

で三つ以上NAとインデックスを見つけ出し、それらの指標の値を置き換えるために再びrollapplyを使用しています。次のようなもの:

#Same input as d.b 
x = c(1L, 2L, 3L, 4L, NA, NA, NA, 8L, 9L, 10L) 

rollapply(x, 3, function(x) ifelse(sum(is.na(x))>=3, NA, mean(x, na.rm=T))) 
#[1] 2.0 3.0 3.5 4.0 NA 8.0 8.5 9.0 
2

たぶん、あなたはrollapplyであなたのfunction引数を変更することで、直接これを行うことができますNA

x = c(1L, 2L, 3L, 4L, NA, NA, NA, 8L, 9L, 10L) 

library(zoo) 
replace(x = rollapply(x, 3, mean, na.rm = TRUE), 
     list = which(rollapply(data = is.na(x), 3, sum) >= 3), 
     values = NA) 
#[1] 2.0 3.0 3.5 4.0 NA 8.0 8.5 9.0 
関連する問題