私は次のようにRで「持っている」データセット、から新しい変数を計算したい:R - (NAが存在する)、グループ化変数に集約うちの1を残す
RE:「R」の値の平均値を特定の観察を除いた所与の「Cat」変数値内にある(注:欠損データが存在し、Rが欠落している場合にREをグループ平均とすることを望む)。
IE:REと同じように、特定の「Cat」変数値内の「I」応答の平均は、特定の観察(同じ欠落データ技術)を除きます。
例示的なデータセットおよび望ましい出力を以下に示します。
を持ち:
ID CAT R I … (Additional variables I need to retain)
1 1 1 3 …
2 1 2 NA …
3 1 1 1 …
4 2 NA 3 …
5 2 4 5 …
6 2 4 NA …
所望のデータセット( "たい")をすべきである:
はたい:
ID CAT R I RE IE … (Additional variables retained)
1 1 1 3 1.5 1 …
2 1 2 NA 1 2 …
3 1 1 1 1.5 3 …
4 2 NA 3 ... ... …
5 2 4 5 …
6 2 4 NA …
は、特に、以下のSQLベースの溶液は、所望の出力を生成します SASにありますが、Rで動作させることができません(sqldfパッケージを使用しています)。私が知っている1つの問題は、欠落している機能がSAS固有であることです(SQLでは普遍的に利用できません)。これらはすべて、sqldfパッケージを使用したSQLソリューションの出発点として役立つかもしれません。
proc sql;
create table want as
select *,
(sum(R)-coalesce(R, 0))/(count(R)-1+missing(R)) as RE,
(sum(I)-coalesce(I, 0))/(count(I)-1+missing(I)) as IE
from have
group by CAT
order by ID, CAT;
quit;
ご協力いただきありがとうございます。
ありがとうございます。最適化された実行のためにapply関数を使用してデモンストレーションすることもできますか? – Justin
私は頭に入れていたのは、関数の本体を 'sapply(seq_along(x)、function(i)mean(x [-i]、na.rm = TRUE))'に置き換えることでした。それは実際には高速です – Damian