繁体   English   中英

R:将综合函数应用于数据集

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM