Я полагаю, что ddply - это инструмент, который мне нужен для моей задачи, и мне трудно получить правильный результат. Я читал в течение нескольких часов о ddply и экспериментировал с различными кодами, но сам по себе я не стал дальше.
вот пример фрейма данных
station <- c(rep("muc",13), rep("nbw", 17))
year <- c(rep(1994,4),rep(1995,4),rep(1996,5),rep(1994,5), rep(1995,4), rep(1996,4), rep(1997, 4))
depth <- c(rep(c("HUM","31-60","61-90","91-220"),2), rep(c("HUM","0-30", "31-60","61-90","91-220"),2),rep(c("HUM","0-30", "31-60","91-220"),1),rep(c("HUM","0-30", "31-60","61-90"),2))
doc <- c(80, 10, 3, 2,70, 15, 5, 5,70, 20, 5, 5, 2, 40, 10, 3, 2, 1,50, 15, 5, 2, 45, 20, 2, 1,35, 8, 2, 1)
df <-data.frame(station,year,depth,doc)
df
Глубина относится к глубине почвы (HUM = гумусовый слой), а doc представляет собой измеренный растворенный органический углерод (doc) для глубины почвы. Обратите внимание, что не каждый год есть измерения для документа, и некоторые классы глубины отсутствуют. Это раздражает, но часто встречается в моем наборе данных.
С помощью ddply я хотел бы добавить столбец к этому фрейму данных, чтобы для каждой глубины возвращался документ вышеупомянутого лежащего слоя почвы, и для HUM NA должен быть задан, так как ничего не находится поверх слоя Humus.
как пример:
depth doc doc_m1
HUM 80 NA
31-60 10 80
61-90 3 10
91-220 2 3
В кадре данных Это, конечно, следует рассчитывать для каждого года и каждой глубины. Я бы хотел избежать циклов и для циклов, и кажется, что ddply подходит для этого, однако мне не повезло получить команду задержки для работы с ddply.
это насколько я получил с кодом (очевидно, не очень далеко):
doc <- ddply(df, .(year), transform,
doc_m1 = ????)
У кого-нибудь есть предложения?
Заранее спасибо!