代码之家  ›  专栏  ›  技术社区  ›  Miguel

在期间忽略NAs。应用

na xts r
  •  1
  • Miguel  · 技术社区  · 6 年前

    我目前有一个包含多个列和行的xts,其中可以存在一些NAs,如下所示:

         utc          VR1_40 VR2_40 VR3_40  Q1_40   Q2_40   Q3_40
    16.05.18 01:49:20   4   4   4   400 400 400
    16.05.18 01:50:20   5   5   5   500 500 500
    16.05.18 01:54:48   5   5   5   500 500 500
    16.05.18 01:57:54   5   5   5   500 500 500
    16.05.18 01:59:54   5   5   5   500 500 500
    16.05.18 02:00:16   null    2   2   200 200 null
    16.05.18 02:03:10   2   null    2   200 200 null
    16.05.18 02:07:12   2   2   null    200 null    200
    16.05.18 02:09:52   2   2   2   null    200 null
    16.05.18 03:09:52   3   3   3   300 300 300
    

    我想要平均10分钟,所以我应用以下代码:

    means.xts <- period.apply(ts, endpoints(ts, "mins", k=10), FUN=mean)
    

    问题是,一个NA将输出整个10分钟的平均NA。

                          VR1_40 Q1_40 VR2_40 Q2_40 VR3_40 Q3_40
    2018-05-16 01:49:20      4   400      4   400      4   400
    2018-05-16 01:59:54      5   500      5   500      5   500
    2018-05-16 02:09:52     NA    NA     NA    NA     NA    NA
    2018-05-16 03:09:52      3   300      3   300      3   300
    

    means.xts <- period.apply(na.omit(ts), endpoints(na.omit(ts), "mins", k=10), FUN=mean)
    

    将从结果中排除整个NA行。

    定义一个自定义均值函数

    means.xts <- period.apply(na.omit(ts), endpoints(na.omit(ts), "mins", k=10), FUN = function(x){mean(x, na.rm = TRUE)})
    

    将所有列平均为一列。

    似乎我错过了一些简单的事情。。。如有任何帮助,我们将不胜感激。

    谢谢!

    1 回复  |  直到 6 年前
        1
  •  0
  •   kenlukas Uday Allu    6 年前

    一种解决方案是将na.rm设置为True。 这样地:

    means.xts <- period.apply(na.omit(ts), endpoints(na.omit(ts), "mins", k=10), FUN = mean,na.rm=T)