3

可変数の最後の観測とさまざまな変数の移動平均を計算できる関数を作成したいと思います。これをモック データとして使用します。

df = expand.grid(site = factor(seq(10)),
                 year = 2000:2004,
                 day = 1:50)
df$temp = rpois(dim(df)[1], 5) 

1 つの変数と一定数の最後の観測値の計算が機能します。たとえば、これは過去 5 日間の気温の平均を計算します。

library(dplyr)
library(zoo)

df <- df %>% 
            group_by(site, year) %>% 
                arrange(site, year, day) %>% 
                      mutate(almost_avg = rollmean(x = temp, 5, align = "right", fill = NA)) %>%
                          mutate(avg = lag(almost_avg, 1))

ここまでは順調ですね。現在、機能化しようとすると失敗します。

avg_last_x <- function(dataframe, column, last_x) {

  dataframe <- dataframe %>% 
    group_by(site, year) %>% 
      arrange(site, year, day) %>% 
        mutate(almost_avg = rollmean(x = column, k = last_x, align = "right", fill = NA)) %>%
          mutate(avg = lag(almost_avg, 1))

  return(dataframe) }

avg_last_x(dataframe = df, column = "temp", last_x = 10)

次のエラーが表示されます。

Error in mutate_impl(.data, dots) : k <= n is not TRUE 

これはおそらくdplyr の評価メカニズムに関連していると理解していますが、修正されていません。

よろしくお願いします。

4

1 に答える 1