2012-02-14 51 views
1

這裏是我的問題:R:應用的整合功能爲數據集

我想通過一段時間的深度曲線來計算葉綠素的綜合指標的濃度。 每天都會拍攝水柱樣本以確定葉綠素a的濃度。我的數據集按以下方式組織:

Col 1 =月份的日期,Col 2 =樣本採集的深度,Col 5 =該深度處的葉綠素a濃度。

day depth chla 
1,1.1,NA 

1,2.6,NA 

1,5.0,NA 

1,9.9,NA 

1,15.0,NA 

1,24.8,NA 

1,49.5,NA 

1,1.1,NA 

1,2.6,0.49 

1,5.0,0.46 

1,10.0,0.75 

1,15.1,0.41 

1,25.0,0.29 

1,49.9,0.26 

2,1.0,0.17 

2,10.0,0.24 

3,0.8,NA 

3,2.5,NA 

3,5.0,NA 

[...] 

集成的方式來計算葉綠素a濃度變爲如下:

對於每一天,對於從0到50米的深度,

葉綠素在每對深度的濃度被平均,然後乘以兩個深度之間的差值以獲得該深度區間中的總濃度。然後將這些深度間隔值在整個深度範圍內求和以獲得該特定日的綜合生產率。

因此,我想獲得每天葉綠素a的綜合濃度,以評估初級生產中的時間變化。

如果任何人都可以幫我寫劇本,那會非常感謝!

謝謝

+0

你有什麼試過(http://mattgemmell.com/2008/12/08/what-have-you-tried/)? – 2012-02-14 19:27:36

+0

您應該以可重現的格式發佈您的數據(或其中的一部分) - 也許在R對象上使用'dput' – 2012-02-14 19:29:54

+0

我懷疑如果您查看'sort'和相關函數以獲取所有內容測量深度順序的給定日期。在這一點上,總結(調用矩陣「mydata」)(mydata [i,2] -mydata [i-1,2])* mydata [i,3]'或者其他接近於此。 – 2012-02-14 19:37:36

回答

3

使用ddplyplyr包由天拆表,應用功能,並重組。對於每一天,下面的積分函數將平均值對與深度差值相乘。 (我發明了一些假數據)

concentrations = data.frame(day=c(1, 1, 1, 2, 2, 2), 
          depth=c(1.1, 2.6, 11, 4, 6, 15), 
          chla=c(1, 4, 5, 4, 6, 9)) 


library(plyr) 

integrate = function(x) { 
    averages = (x$chla[1:length(x)-1] + x$chla[2:length(x)])/2 
    sum(averages * diff(x$depth)) 
} 

result = ddply(concentrations, .(day), integrate) 
print(result) 
+0

謝謝你的快速回復! – 2012-02-14 20:09:10

+0

不客氣。如果它解決了您的問題,請不要忘記接受(並且upvote) – 2012-02-14 20:15:37

+0

'Fess up,@David:您是否首先查看我的評論? :-) – 2012-02-14 20:47:22