サブセット化されたデータフレームの列の平均を計算する関数を作成しようとしています。ここでの秘訣は、常にいくつかのサブセット化条件を持ち、さらに条件を関数に渡してデータフレームをさらにサブセット化するオプションを用意することです。
私のデータが次のようになっているとします。
dat <- data.frame(var1 = rep(letters, 26), var2 = rep(letters, each = 26), var3 = runif(26^2))
head(dat)
var1 var2 var3
1 a a 0.7506109
2 b a 0.7763748
3 c a 0.6014976
4 d a 0.6229010
5 e a 0.5648263
6 f a 0.5184999
すべての関数呼び出しで最初の条件を使用して、以下に示すサブセットを実行できるようにしたいと考えています。2 番目の条件は、関数呼び出しごとに変更できるものです。さらに、2 番目のサブセット条件は、他の変数にある可能性があります (節約のために単一の変数 を使用していますvar2
が、条件には複数の変数が含まれる可能性があります)。
subset(dat, var1 %in% c('a', 'b', 'c') & var2 %in% c('a', 'b'))
var1 var2 var3
1 a a 0.7506109
2 b a 0.7763748
3 c a 0.6014976
27 a b 0.7322357
28 b b 0.4593551
29 c b 0.2951004
私の関数と関数呼び出しの例は次のようになります。
getMean <- function(expr) {
return(with(subset(dat, var1 %in% c('a', 'b', 'c') eval(expr)), mean(var3)))
}
getMean(expression(& var2 %in% c('a', 'b')))
別の呼び出しは次のようになります。
getMean(expression(& var4 < 6 & var5 > 10))
どんな助けでも大歓迎です。
編集: Wojciech Sobala の助けを借りて、0 以上の条件を渡すオプションを提供する次の関数を思い付きました。
getMean <- function(expr = NULL) {
sub <- if(is.null(expr)) { expression(var1 %in% c('a', 'b', 'c'))
} else expression(var1 %in% c('a', 'b', 'c') & eval(expr))
return(with(subset(dat, eval(sub)), mean(var3)))
}
getMean()
getMean(expression(var2 %in% c('a', 'b')))