2

Google、stackoverflow、またはstackexchangeで答えが見つからないように見えるという簡単な質問があります。私は現在rollapply、NAを含むいくつかの値の合計を見つけるための例を扱っています。例えば:

 z <- zoo(c(NA, NA, NA, NA,2, 3, 4, 5, NA))
 rollapply(z, 3, sum, na.rm = TRUE, align = "right")

これは以下を出力します:

  3  4  5  6  7  8  9 
  0  0  2  5  9 12  9 

これは良さそうに見えますが、3 つの NA が連続している場合が 2 つあります。合計機能は、NA を 0 に交換します。残念ながら、0 は意味のある値であるため、これから扱うデータでは機能しません。0 を NA に置き換える方法はありますか?

以下のような出力を探しています。

  3   4   5  6  7  8  9 
  NA  NA  2  5  9 12  9 

前もって感謝します!

4

2 に答える 2

0

以下に 2 つのアプローチを示します。

1)rollapplyが 0 を与えているのではなく、 0 を与えていることに注意してください。sum(x, na.rm = TRUE)この関数sum(x, na.rm = TRUE)は、ここで実際に必要なものではありません。

代わりに、必要な方法で動作する のバージョンを提供してsumください。つまりNA、入力が完全にNA値の場合は戻り、それ以外の場合は戻りsum(x, na.rm = TRUE)ます。

sum_na <- function(x) if (all(is.na(x))) NA else sum(x, na.rm = TRUE)
rollapplyr(z, 3, sum_na)

2)または、コードを使用して、入力がすべて:NAである位置を置き換えて、後で修正します。NA

zz <- rollapplyr(z, 3, sum, na.rm = TRUE)
zz[rollapply(is.na(z), 3, all)] <- NA

与える:

> zz
 3  4  5  6  7  8  9 
NA NA  2  5  9 12  9 
于 2016-09-22T11:53:39.240 に答える