次のようなデータセットがあります。多くのクラスがあり、それぞれに多くの (5-10) サブクラスがあり、それぞれに値が関連付けられています。
> data.frame(class=rep(letters[1:4], each=4), subclass=c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8), value=1:16)
class subclass value
1 a 1 1
2 a 1 2
3 a 2 3
4 a 2 4
5 b 3 5
6 b 3 6
7 b 4 7
8 b 4 8
9 c 5 9
10 c 5 10
11 c 6 11
12 c 6 12
13 d 7 13
14 d 7 14
15 d 8 15
16 d 8 16
最初に各クラス/サブクラスの値を合計し、次にすべてのサブクラスの中で各クラスの中央値を取得します。
つまり、中間ステップは各クラスの各サブクラスの値を合計し、次のようになります (この中間ステップからのデータを保持する必要がないことに注意してください)。
> data.frame(class=rep(letters[1:4], each=2), subclass=1:8, sum=c(3,7,11,15,19,23,27,31))
class subclass sum
1 a 1 3
2 a 2 7
3 b 3 11
4 b 4 15
5 c 5 19
6 c 6 23
7 d 7 27
8 d 8 31
2 番目のステップでは、すべてのサブクラスの中で各クラスの中央値を取得し、次のようになります。
> data.frame(class=letters[1:4], median=c(median(c(3,7)), median(c(11,15)), median(c(19,23)), median(c(27,31))))
class median
1 a 5
2 b 13
3 c 21
4 d 29
これは私が保持する必要がある唯一のデータです。$class と $subclass の両方が因子変数になり、value は常に欠損のない正の整数になることに注意してください。各クラスには、さまざまな数のサブクラスがあります。
厄介な for ループを使用してこれを実行できると確信していますが、ベクトル化され、保守が容易なより良い方法を望んでいました。