[英]R: Apply an integrative function to a dataset
这是我的问题:
我想通过深度剖面随时间计算叶绿素浓度的综合指数。 每天采集水柱样品以确定叶绿素a浓度。 我的数据集以这种方式组织:
第1列=月中的某天,第2列=收集样本的深度,第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浓度取平均值,然后乘以两个深度之间的差值以得到该深度间隔中的总浓度。 然后在整个深度范围上对这些深度间隔值求和,以获得该特定日期的综合生产率。
因此,我希望每天获得叶绿素a的综合浓度,以评估初级生产中的时间变化。
如果有人可以帮我写剧本,那将非常感激!
谢谢,
使用plyr包中的ddply按日拆分表,应用函数并重新组合。 对于每一天,下面的积分功能都会将平均值对乘以深度差。 (我发明了一些假数据作为例子)
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.