我试图计算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
答案 0 :(得分:1)
问题解决了。
@akrun,我的数据框很大(1490375个障碍物和61个不同的站),所以我尝试将dput
与其子集一起使用。意识到使用一些子集命令工作,我开始测试不同的大小,以找到导致错误的数据的确切部分。
获得100个障碍物。数据框,我看到一个特定的站只有一个观察点,不仅在子集上,而且在整个数据帧上! (一个简单的summary(df1$code)
可以很快发现。我的坏)
排除这一观察,该命令运作顺利。
因此,当 rollingMean 找不到足够的观察值来计算滚动平均值时,可能会发生这种类型的错误。我永远不会猜到这一点。
无论如何,谢谢@akrun和@jalapic。 :)