欲计算从“具有”的数据集,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