Мне нужно рассчитать скользящее среднее геометрическое для фекальных кишечных палочек с течением времени (для каждого значения мне нужно среднее геометрическое этого значения и предыдущих 29 значений) по отдельным станциям отбора проб. Когда я загружаю данные из нашей базы данных, заголовки столбцов:
Station SampleDate FecalColiform
В зависимости от района выращивания существует от нескольких до более дюжины станций.
Я попытался адаптировать код, который нашел по адресу ЗДЕСЬ:
#File: Fecal
Fecal <- group_by(Fecal, Station) %>%
arrange(SampleDate) %>%
mutate(logres = log10(ResultValue)) %>%
mutate(mgm = stats::filter(logres, rep(1/24, 24), sides =1))
Это сработало, но проблема в том, что мне не нужны результирующие значения журнала. Мне нужно только обычное среднее геометрическое, чтобы я мог его построить, и каждый мог легко понять значения. Я пытался как-то украсть функцию геометрического.среднее из пакета psych, но не смог заставить это работать.
Существуют ресурсы для расчета скользящего среднего и код для расчета среднего геометрического, и я попытался объединить несколько из них. Я не могу найти пример для перемещения среднего геометрического.
В конце концов, я хотел бы построить график всех геосредних по станциям, как в примере по ссылке выше.
> dput(ByStationRGMData[1:10,])
structure(list(Station = c(114L, 114L, 114L, 114L, 114L, 114L,
114L, 114L, 114L, 114L), Classification = structure(c(3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c(" Approved ", " Conditionally Approved ",
" Prohibited "), class = "factor"), SampleDate = c(19890103L,
19890103L, 19890209L, 19890316L, 19890413L, 19890511L, 19890615L,
19890713L, 19890817L, 19890914L), SWTemp = c(NA, NA, 5L, 8L,
NA, 13L, 15L, 18L, NA, 18L), Salinity = c(NA, NA, 22L, 18L, NA,
26L, 22L, 24L, NA, 32L), FecalColiform = c(180, 49, 2, 17, 7.9,
1.8, 4.5, 11, 33, 1.8), RGM = c(NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_
)), .Names = c("Station", "Classification", "SampleDate", "SWTemp",
"Salinity", "FecalColiform", "RGM"), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -10L), vars = list(
Station), drop = TRUE, indices = list(0:9), group_sizes = 10L, biggest_group_size = 10L, labels = structure(list(
Station = 114L), class = "data.frame", row.names = c(NA,
-1L), vars = list(Station), drop = TRUE, .Names = "Station"))
Я также хотел бы добавить движущийся 90-й процентиль к кадру данных и графикам. Я пробовал следующее:
ByStationRGMData <- RawData %>%
group_by(Station) %>%
arrange(SampleDate) %>%
mutate(RGM = as.numeric(rollapply(FecalColiform, 30, geometric.mean, fill=NA, align="right"))) +
mutate(F90 = as.numeric(rollapply(FecalColiform, 30, quantile, p=0.90, fill=NA, align="right")))
Это дает мне ошибку:
Ошибка в mutate_(.data, .dots = lazyeval::lazy_dots(...)) : аргумент ".data" отсутствует, без значения по умолчанию
Я не могу понять, чего мне не хватает.
exp(...)
, чтобы получить среднее геометрическое. - person jogo   schedule 25.11.2015