我目前有一个包含多个列和行的xts,其中可以存在一些NA,就像下面看到的那样:
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
像这样使用na.omit
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)})
将所有列平均为一个列。
似乎有一些我想念的简单......感谢任何帮助。
谢谢!
答案 0 :(得分:0)
一种解决方案是将na.rm设置为True。 像这样:
means.xts <- period.apply(na.omit(ts), endpoints(na.omit(ts), "mins", k=10), FUN = mean,na.rm=T)