R: применить интегративную функцию к набору данных - PullRequest
1 голос
/ 14 февраля 2012

вот мой вопрос:

Я хочу рассчитать интегрированный индекс концентрации хлорофилла по профилю глубины во времени. Каждый день отбирали пробу водяного столба для определения концентрации хлорофилла. Мой набор данных организован следующим образом:

Col 1 = день месяца, Col 2 = глубина, на которой был собран образец, и Col 5 = концентрация хлорофилла на этой глубине.

    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

[...]

Интегрированный способ расчета концентрации хлорофилла выглядит следующим образом:

Для каждого дня и для глубин от 0 до 50 метров,

Концентрация хлорофилла на каждой паре глубин усредняется, а затем умножается на разницу между двумя глубинами, чтобы получить общую концентрацию в этом интервале глубин. Эти значения интервала глубины затем суммируются по всему диапазону глубины, чтобы получить интегрированную производительность за определенный день.

Итак, я хочу получить интегрированную концентрацию хлорофилла a для каждого дня, чтобы оценить временные изменения в первичной продукции.

Если бы кто-нибудь мог помочь мне написать сценарий, это было бы очень признательно!

Спасибо,

1 Ответ

3 голосов
/ 14 февраля 2012

Используйте ddply из пакета plyr , чтобы разделить таблицу по дням, применить функцию и рекомбинировать.Для каждого дня приведенная ниже функция интегрирования умножает пары средних значений на разницу в глубине.(Я придумываю некоторые поддельные данные в качестве примера)

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...