ベクトルと行をほとんど使わないで単純な演算を行う必要があります。R:異なる接尾辞を持つベクトルに演算を適用する
は、Iのようなデータベースを持っていると仮定:
observation outcome_1_a outcome_2_a outcome_1_b outcome_2_b choice_a choice_b
1 41 34 56 19 1 1
2 32 78 43 6 2 1
3 39 19 18 55 1 2
各観察、outcome_1について
二つの可能な結果がoutcome_2あるiは、Bは=と、選択は、選択された結果とプレフィックス_iであります状況が繰り返される回数を示します。
私は、したがって、(a、b)は各状況のための最高の結果を格納した変数作成する場合:私は、各状況で選択した値を格納する変数を作成したい場合は、同様に
max.a <- pmax(data$outcome_1_a, data$outcome_2_a)
max.b <- pmax(data$outcome_1_b, data$outcome_2_b)
をは、私が行うことができます。
choice.a <- ifelse(data$choice_a == "1", data$outcome_1_a, data$outcome_1_b)
choice.b <- ifelse(data$choice_b == "1", data$outcome_2_a, data$outcome_2_b)
を最後に、私は状況の行 AとBとで平均値を計算したい場合は、私ができますdo:
library(data.table)
setDT(data)
data[, .(Mean = rowMeans(.SD)), by = observation, .SDcols = c("outcome_1_a","outcome_2_a", "outcome_1_b", "outcome_2_b")]
これらのすべてはうまくいきます。しかし、私はそのような操作がより効率的な方法で実行できるかどうか疑問に思っていました。
この例では、の状況はですが、将来的には15個以上の異なる状況(a、b、c、d、...、 )、そのような操作を書くことは面倒かもしれません。
変数の異なる接頭辞や接尾辞に基づいて、このようなプロセスを自動化する方法はありますか?
ありがとうございました
ありがとうございます。あなたのコードは、 'RowMeans'の場合にうまく機能します。しかし、もし私が何か働いていれば私を許してください。列ごとの最大値の場合、プロセスを自動化しません。つまり、 'data [、do.call(pmax、.SD)、.SDcols = names(data)% % "\\ d + _a $"] 'のように' pmax(data $ outcome_1_a、data $ outcome_2_a) 'と同じ出力を返します。私はまだ 'SDcols'引数で手動で手紙を変更する必要があります –