R 如何根据时间序列数据计算年平均值

R 如何根据时间序列数据计算年平均值,r,openair,R,Openair,我有一个关于计算我的数据的年平均值的问题。 这是我的数据dt。选择: head(dt.select) DATE SITE_ID TSO4 TNO3 TNH4 NSO4 61372 2000-01-07 ALH157 1.9873 3.3794 1.5214 0.2743 61369 2000-01-14 ALH157 1.9451 4.3169 1.4218 0.9190 61376 2000-01-21 ALH157 2.9216 4.

我有一个关于计算我的数据的年平均值的问题。 这是我的数据dt。选择:

head(dt.select)    

        DATE      SITE_ID   TSO4   TNO3   TNH4   NSO4
61372 2000-01-07  ALH157 1.9873 3.3794 1.5214 0.2743
61369 2000-01-14  ALH157 1.9451 4.3169 1.4218 0.9190
61376 2000-01-21  ALH157 2.9216 4.7621 2.2883 1.1009
61371 2000-01-28  ALH157 2.9312 5.5041 2.4494 1.9243
67249 2000-02-04  ALH157 3.1832 7.7116 3.1407 0.9057
67244 2000-02-11  ALH157 5.1027 9.7623 4.6308 0.3478

tail(dt.select)

        DATE      SITE_ID   TSO4   TNO3   TNH4   NSO4
49342 2015-11-27  ALH157 1.1826 1.8821 0.7209 0.6908
55291 2015-12-04  ALH157 1.5332 3.9142 1.6252 0.7613
55292 2015-12-11  ALH157 1.5277 1.0478 0.5452 0.6588
55293 2015-12-18  ALH157 0.9947 1.0137 0.4906 0.5088
55294 2015-12-25  ALH157 0.7792 0.6357 0.4327 0.5266
55260 2016-01-01  ALH157 1.4620 1.7782 0.9438 0.4873
这是近15年的数据。现在,我使用下面的代码来获得年平均值

Annual.Ave <- aggregate(dt.select[-2], format(dt.select[1],"%Y"),
                        mean, na.rm = TRUE)
您知道如何修复代码以获得如下结果吗

DATE SITE_ID   TSO4   TNO3   TNH4   NSO4
1 2000 ALH157 4.250796 2.943349 2.057633
有一条路要走:

# create year variable
dt.select$year <- format(dt.select[1],"%Y")
# aggregate
Annual.Ave <- aggregate(dt.select[-c(1,2)], df[c("SITE_ID", "year")],
                    mean, na.rm = TRUE)
或者按照@42-的建议

    # create year variable
dt.select$year <- format(dt.select[1],"%Y")
# aggregate
Annual.Ave <- aggregate(dt.select[-c(1,2)], df["year"],
                    mean, na.rm = TRUE)
Annual.Ave$site <- "ALH157"

这将为您的数据获得相应年份的列式平均值,然后离开站点Id

library("plyr")
dates<- format(as.Date(dt.select$DATE), format = "%Y")
# Column wise
ddply(dt.select, .(SITE_ID, dates), summarise,
      mean_TSO4 = mean(TSO4),
      mean_TNO3 = mean(TNO3),
      mean_TNH4 = mean(TNH4),
      mean_NSO4 = mean(NSO4))

我希望有帮助。您可以从此

中了解更多信息,因为您希望输入站点ID列,您是否正在尝试获取每个站点TS/TN/NS列的年平均值?您好,这是仅来自一个站点ALH157的数据。但是我喜欢保留这个列。但是如果在一个数据帧中有多个SITE\u ID,那么这个列应该显示什么,因为它是在所有SITE\u ID上聚合的?这就是它被丢弃的原因。除非您想要每个站点的总ID,或者您保证每个数据帧中只有一个站点ID,否则保留它是没有意义的it@LeeYee你不能取站点ID的平均值。。。因为它不是数字。如果你想在SITE_ID的类别中包含means,那么你需要将它与年份索引一起包含在第二个参数中。数据是一个大数据集的子集。得到年平均值后,我会将其与其他数据合并。因此,如果我能保留站点ID栏就好了。非常感谢@lmo,我通过运行您的代码错误得到错误消息:unexpected',,in Annual.Ave
library("plyr")
dates<- format(as.Date(dt.select$DATE), format = "%Y")
# Column wise
ddply(dt.select, .(SITE_ID, dates), summarise,
      mean_TSO4 = mean(TSO4),
      mean_TNO3 = mean(TNO3),
      mean_TNH4 = mean(TNH4),
      mean_NSO4 = mean(NSO4))
   SITE_ID dates mean_TSO4 mean_TNO3 mean_TNH4 mean_NSO4
1  ALH157  2000   3.01185  5.906067   2.57540   0.91200
2  ALH157  2015   1.20348  1.698700   0.76292   0.62926
3  ALH157  2016   1.46200  1.778200   0.94380   0.48730