1

個々のサンプリングステーションごとに、経時的に糞便大腸菌群の移動幾何平均を計算する必要があります(各値で、その値と前の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))

これは機能しましたが、問題は、結果のログ値が必要ないことです。プロットして誰もが値を簡単に理解できるように、通常の地理平均だけが必要です。そこにあるpsychパッケージから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" がありません。デフォルトはありません

何が欠けているのか分からないようです。

4

1 に答える 1

2

You can use rollapply from the zoo package (illustrated here using the built-in mtcars data frame). I've used a window of 3 values, but you can set that to 30 in your actual data. align="left" uses the current value and n-1 previous values, where n is the window width:

library(psych)
library(dplyr)
library(zoo)

mtcars %>% 
  mutate(mpgGM = rollapply(mpg, 3, geometric.mean, fill=NA, align="left"))

Include a grouping variable to get rolling geometric means separately for each group.

于 2015-11-24T21:37:17.867 に答える