カテゴリ変数 catA、catB、および catC を含むデータフレームの例。Obs は観測値です。
catA <- rep(factor(c("a","b","c")), length.out=100)
catB <- rep(factor(1:4), length.out=100)
catC <- rep(factor(c("d","e","f")), length.out=100)
obs <- runif(100,0,100)
dat <- data.frame(catA, catB, catC, obs)
カテゴリ変数によるデータのすべての可能なサブセット。
allsubs <- expand.grid(catA = c(NA,levels(catA)), catB = c(NA,levels(catB)),
catC = c(NA,levels(catC)))
> head(allsubs, n=10)
catA catB catC
1 <NA> <NA> <NA>
2 a <NA> <NA>
3 b <NA> <NA>
4 c <NA> <NA>
5 <NA> 1 <NA>
6 a 1 <NA>
7 b 1 <NA>
8 c 1 <NA>
9 <NA> 2 <NA>
10 a 2 <NA>
次に、dat の対応するサブセット (各行で cat 変数の組み合わせによって定義される) に適用された関数からの結果を含む結果列を含む出力データフレームを作成する最も簡単な方法は何ですか。したがって、出力は次のデータフレーム「whatiwant」のようになります。結果列には、各サブセットに適用された関数の結果が含まれます。
> whatiwant
catA catB catC results
1 <NA> <NA> <NA> *
2 a <NA> <NA> *
3 b <NA> <NA> *
4 c <NA> <NA> *
5 <NA> 1 <NA> *
6 a 1 <NA> *
7 b 1 <NA> *
8 c 1 <NA> *
9 <NA> 2 <NA> *
10 a 2 <NA> *
したがって、適用された関数が「平均」である場合、結果は次のようになります。
dat$results[1] = mean(subset(dat,)$obs)
dat$results[2] = mean(subset(dat, catA=="a")$obs)
などなど。