私は単純なdata.frameを持っています。ここではいくつかの要約統計量を繰り返し計算したいと思っています。例えば、5つの観測(2つの遅れ、先に現在の2)のウィンドウにわたって圧延メジアンしかしながら現在の行を持たないrollaplyを使用
library(dplyr)
x <- data.frame("vals" = rnorm(3e04))
y <- x %>%
mutate(med5 = rollapply(data = vals,
width = 5,
FUN = median,
align = "center",
fill = NA,
na.rm = TRUE))
によって達成される、私はこの計算から現在の行を除外したいと思います。私は、次のアプローチを見つけた:
z <- x %>%
mutate(N=1:n()) %>%
do(data.frame(., prmed = sapply(.$N, function(i) median(.$vals[.$N %in% c((i - 2):(i - 1), (i + 1):(i + 2))]))))
私はその後NA
に最初の2つの値を設定する場合、これは、私が欲しいものを行います。
これまでのところ、唯一の問題は、後者のアプローチがrollapplyに比べて非常に遅いということです。
前者のスピードで後者の結果を達成する方法はありますか?
魅力のように動作します、ありがとう!エレガントで、簡単で、中央値以外の機能に簡単に一般化できます。 – Akkariz