如何根据时间序列数据计算年平均值
问题描述:
我在计算数据的年平均值时遇到了一个问题。 这里是我的数据(dt.select):如何根据时间序列数据计算年平均值
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)
的结果是什么样的,我想,但“SITE_ID”的列被删除,还有,我不需要进行随机“日期”一栏。
head(Annual.Ave)
DATE DATE TSO4 TNO3 TNH4
1 2000 2000-07-03 4.250796 2.943349 2.057633
2 2001 2001-07-02 3.986159 2.896429 1.949810
3 2002 2002-07-01 4.483027 2.600660 1.985302
4 2003 2003-06-30 3.831227 2.493104 1.786642
5 2004 2004-07-02 3.375330 2.319875 1.556811
6 2005 2005-07-04 4.785614 2.399269 2.089143
您知道如何修复代码以获得如下结果吗?
DATE SITE_ID TSO4 TNO3 TNH4 NSO4
1 2000 ALH157 4.250796 2.943349 2.057633
答
这将让你一期列意味着你的数据,对各年,然后离开Site_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))
输出
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
我希望它能帮助。您可以通过此了解更多plyr package
答
这里是一条路可走:
# 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"
+0
非常感谢@lmo,通过运行代码'Error:unexpected','in Annual.Ave
+0
太棒了!谢谢! –
既然您想要SITE_ID列,您是否试图获得每个工作站*的TS/TN/NS列*年平均值? –
嗨,这是仅来自一个网站(ALH157)的数据。但我想保留这一栏。 –
但是,如果您在一个数据框中有多个SITE_ID,那么该列应该显示什么,因为它是聚合在所有SITE_ID上的? (这就是为什么它被丢弃的原因,保留它是没有意义的,除非你想要每个SITE_ID的总数,或者你保证每个数据帧只有一个SITE_ID) –