0

我正在尝试在污染物数据框上使用ddply + rollingMean命令计算 8 小时滚动平均值,如下所示:

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`

如您所见,时间序列不完整(这就是我使用 openair 的rollingMean的原因,它根据“日期”列处理数据),并且有不同的站“代码”(我使用ddply分隔,因为rollingMean不不能与多个站点一起工作)。

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

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

回报是:

错误:'by' 是 NA

谁能帮我解决这个错误?
提前致谢。

PS:使用类似的“o3”数据框,如下所示:

> 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
4

1 回答 1

1

问题解决了。

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

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

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

于 2014-09-09T04:57:11.223 回答