欲計算從「具有」的數據集,R中新的變量,如下所示:的R - 留一個聚集上的分組變量(NA存在)
RE:的「R」值的平均在給定的「Cat」變量值內,不包括具體的觀察值(注意:缺少數據存在,我希望RE在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包)工作。我知道的一個問題是缺少的函數是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