ddply()
定義された最も詳細なグループだけでなく、それらのサブグループのグループの出力を取得するために使用する雄弁な方法はありますか?
つまり、分類子の1つが「任意」、「どちらか」、「関係ない」の場合です。ddply
2つのグループ化変数の単純なケースでは、これは;への個別の呼び出しによって実現できます。ただし、すべて「any」に設定できる3つ以上の分類子がある場合ddply
、「any」+その他の新しい組み合わせごとに何度も実行する必要があるため、これは厄介になります。
再現可能な例:
require(plyr)
## create a data frame with three classification variables
## and two numeric variables:
df1=data.frame(classifier1 = LETTERS[sample(2,200,replace=T)],
classifier2 = letters[sample(3,200,replace=T)],
classifier3 = rep(c("foo","bar"),100),
VAR1 = runif(200,50,250),
VAR2 = rnorm(200,85,20))
## apply an arbitrary function to subsets of df1; that is, all unique
## combinations of the three classifiers.
dlply(df1, .(classifier1,classifier2,classifier3),
function(df) lm(VAR1 ~ VAR2, data=df))
$A.a.bar
Call:
lm(formula = VAR1 ~ VAR2, data = df)
Coefficients:
(Intercept) VAR2
230.5555 -0.8591
$A.a.foo
Call:
lm(formula = VAR1 ~ VAR2, data = df)
Coefficients:
(Intercept) VAR2
128.3078 0.3631
...
さて、いずれか/すべての分類子が含まれていないときに、さらにいくつかのグループで同じ出力を取得したい場合はどうなりますか。たとえば、when classifier1 = "any"を含めたい場合は、次のdlply
ように、ステートメントにclassifier2とclassifier3のみを含めます。
dlply(df1, .(classifier2,classifier3), function(df) lm(VAR1 ~ VAR2, data=df))
次に、classifier2とclassifier3 = "any"の出力を取得したい場合は、ddply
呼び出しから再度削除し、classifier1のみを含めます。
dlply(df1, .(classifier1), function(df) lm(VAR1 ~ VAR2, data=df))
ただし、3つよりも多くの分類子がある場合、これは扱いにくくなり、各分類子を取り出すことができます(つまり、= "any")-組み合わせの数が大幅に増加します。データのすべての「グループのグループ」の出力を取得するための雄弁で高速な方法はありますか?