“错误:使用ddply和rollingMean,'by'是NA”

时间:2014-09-09 03:15:25

标签: r plyr openair

我试图计算8小时滚动意味着在污染物数据框架上使用 ddply + rollingMean 命令,如下所示:

df1
date                co      code
2000-01-17 01:00:00 0.97000 42
2000-01-17 02:00:00 0.97000 42
2000-01-17 03:00:00 0.98000 42
2000-01-17 04:00:00 0.98000 42
2000-02-04 08:00:00 0.70000 42
2000-02-04 09:00:00 1.40000 42
2000-02-04 10:00:00 1.51000 42
2000-02-04 11:00:00 1.49000 43
2000-02-04 12:00:00 1.98000 43
2000-02-04 15:00:00 1.61000 43
2000-02-04 16:00:00 1.88000 43
2000-02-04 17:00:00 1.64000 43
2000-02-04 18:00:00 1.62000 43
2000-02-04 19:00:00 2.05000 43`

正如您所看到的,时间序列尚未完成(这就是为什么我使用露天广场&#39> rollingMean ,它根据a处理数据"日期"列),以及有不同的电台"代码" (我使用 ddply 分隔,因为 rollingMean 不能与多个工作站一起工作)。

但是,当我使用此代码时:

> pd<-ddply(df1,.(code),function(df){df<-rollingMean(df,pollutant="co",
             width=8,new.name="rolling",data.thresh=75);return(df)})`

回报是:

  

错误:&#39;&#39;是NA

任何人都可以帮我解决这个错误吗? 提前致谢。

PS:使用类似的&#34; o3&#34;数据框如下:

> head(var2)
date                o3    codigo
2000-01-01 01:00:00 23.25      1
2000-01-01 02:00:00 20.08      1
2000-01-10 16:00:00 63.67      1
2000-01-10 17:00:00 80.64      1
2000-01-10 18:00:00 86.48      1
2000-01-10 19:00:00 61.48      1

和此命令:

pd<-ddply(var2,.(codigo),function(df){df<-rollingMean(df,pollutant="o3",
           width=8,new.name="medmov",data.thresh=75);return(df)})

代码工作正常,显示:

> head(pd)
date                o3    codigo  medmov
2000-01-01 01:00:00 23.25      1      NA
2000-01-01 02:00:00 20.08      1      NA
2000-01-01 03:00:00 22.31      1      NA
2000-01-01 04:00:00 23.02      1 22.1650
2000-01-01 05:00:00 12.40      1 20.2120
2000-01-01 06:00:00 11.67      1 16.2575

1 个答案:

答案 0 :(得分:1)

问题解决了。

@akrun,我的数据框很大(1490375个障碍物和61个不同的站),所以我尝试将dput与其子集一起使用。意识到使用一些子集命令工作,我开始测试不同的大小,以找到导致错误的数据的确切部分。
获得100个障碍物。数据框,我看到一个特定的站只有一个观察点,不仅在子集上,而且在整个数据帧上! (一个简单的summary(df1$code)可以很快发现。我的坏) 排除这一观察,该命令运作顺利。

因此,当 rollingMean 找不到足够的观察值来计算滚动平均值时,可能会发生这种类型的错误。我永远不会猜到这一点。

无论如何,谢谢@akrun和@jalapic。 :)