2016-04-14 20 views
-1

私のデータの年間平均を計算する際に1つの問題があります。 はここにある私のデータ(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」の欄が削除され、私が必要としていないランダムな「DATE」欄があります。

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 
+0

SITE_ID列が必要なので、ステーションあたりのTS/TN/NS列*の年間平均を取得しようとしていますか? –

+0

こんにちは、これは1つのサイト(ALH157)からのデータです。私はこのコラムを覚えています。 –

+0

しかし、1つのデータフレームに複数のSITE_IDがある場合、この列はすべてのSITE_IDで集計されるので、どのように表示する必要がありますか? SITE_IDごとに合計が必要な場合、または各データフレームにSITE_IDが1つしかないことが保証されている場合を除きます) –

答えて

0

その後、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

0

行くための一つの方法である:これは、列方向は、それぞれのために、あなたのデータの意味あなたを得るでしょう、42-の@

# 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) 

または以下の提案

# 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、あなたのコード 'エラー:予期しない '、' Annual.Ave < - aggregate(dt.select [ - (1、" ' –

+0

素晴らしい!ありがとう! –

関連する問題