我需要通过单个采样站计算粪大肠菌群随时间的移动几何平均值(在每个值我希望该值的几何形状和前29个值)。当我从数据库下载数据时,列标题是:
Station SampleDate FecalColiform
根据种植面积的不同,有十几个站点。
我尝试调整我在HERE找到的一些代码:
#File: Fecal
Fecal <- group_by(Fecal, Station) %>%
arrange(SampleDate) %>%
mutate(logres = log10(ResultValue)) %>%
mutate(mgm = stats::filter(logres, rep(1/24, 24), sides =1))
这很有用,但问题是我不希望得到的日志值。我只想要常规几何体,以便我可以绘制它,每个人都可以轻松理解这些值。我试图以某种方式偷偷摸摸来自心理包的geometric.mean函数,我无法做到这一点。
有计算移动平均线的资源,以及计算几何平均数的代码,我试图将它们中的几个组合起来。我找不到移动几何平均值的例子。
最终我想按照与上面链接中的示例相似的方式绘制所有几何图形。
> 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”缺失,没有默认值
我似乎无法弄清楚我错过了什么。
答案 0 :(得分:2)
您可以使用rollapply
包中的zoo
(此处使用内置mtcars
数据框说明)。我使用了一个包含3个值的窗口,但您可以在实际数据中将其设置为30。 align="left"
使用当前值和n-1个先前值,其中n是窗口宽度:
library(psych)
library(dplyr)
library(zoo)
mtcars %>%
mutate(mpgGM = rollapply(mpg, 3, geometric.mean, fill=NA, align="left"))
包含分组变量以分别为每个组获取滚动几何平均值。