在值周围的窗口中替换NA

时间:2015-11-25 21:14:32

标签: r na zoo

我的动物园数据如下所示。该数据是较大动物园(时间序列)数据集的一部分。

  string tempFilename = string.Empty;
  SolidBrush Brushcolor;
  bool colorSwitch = false;

protected override void OnDrawItem(DrawItemEventArgs e)
{
 e.DrawBackground();

// Group colors
   string text = this.Items[e.Index].ToString();
   string filename = Path.GetFileName(text);

    if (filename == tempFilename)
     equal = true;
    else equal = false;

    if (equal)
     Brushcolor = ExChangeBrush(!colorSwitch);
    else
    {
     Brushcolor = ExChangeBrush(colorSwitch);
     colorSwitch = !colorSwitch;
    }

    tempFilename = filename;
// end Group colors

   e.Graphics.FillRectangle(Brushcolor, e.Bounds);

   e.Graphics.DrawString(text, e.Font, new SolidBrush(Color.Black), new PointF(e.Bounds.X, e.Bounds.Y));

   base.OnDrawItem(e);
  }

我想用非NA值替换每个非NA值周围的窗口中的NA。例如,非NA周围的[EDIT] 5窗口如下所示:

 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 
NA NA NA NA NA  1 NA NA NA NA NA  3 NA NA NA

 library(zoo)    
 x <- zoo(c(NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, 3, NA, NA, NA, NA))

我可以用一长串杂乱的 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 NA NA NA 1 1 1 1 1 NA 3 3 3 3 3 NA 语句来做我想要的事情。

有更好的方法吗?我查看了动物园的NA填充函数集,但没有看到窗口的任何内容。

2 个答案:

答案 0 :(得分:2)

我想滚动申请会完成这项工作吗?

> rollapply(x, 5, function(x){mean(x[!is.na(x)])}, fill=NA)
  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16 
 NA  NA NaN   1   1   1   1   1 NaN   3   3   3   3   3  NA  NA 

答案 1 :(得分:0)

我们也可以使用filter

v2 <- stats::filter(replace(v1,is.na(v1),0), rep(1,5))
is.na(v2) <- !v2