我有一个 300x5 的数据框,如下所示(3 组,每组 100 行,每组 id 从 01 到 100,相同的 id 意味着相同的 feat2 和 feat3 但总是不同的
num_to_sum
):
因素/组 | id | num_to_sum | 壮举2 | 壮举3 |
---|---|---|---|---|
组1 | 01 | 4 | ... | ... |
组1 | 02 | 9 | ... | ... |
组2 | 01 | 3 | ... | ... |
组2 | 02 | 1 | ... | ... |
组3 | 01 | 4 | ... | ... |
组3 | 02 | 8 | ... | ... |
现在,我想按 id 合并所有行,但前提是它们属于某个组。例如:我想通过 id 合并 group1 和 group2 并将求和运算符应用于
num_to_sum
,因此最终的数据帧(输出)应如下所示:
因素/组 | id | summed_num | 壮举2 | 壮举3 |
---|---|---|---|---|
组12 | 01 | (4+3=)7 | ... | ... |
组12 | 02 | (9+1=)10 | ... | ... |
组3 | 01 | 4 | ... | ... |
组3 | 02 | 8 | ... | ... |
我不介意其他功能(feat2 和 feat3);实际上,无论组如何,每个 id 的它们都是相同的,所以我可以删除它们,我只是不希望它们在最终的 df 中重复,因为这意味着重复的数据,这很混乱。
如果有一个解决方案不仅可以应用于两个组,还可以应用于要合并的
n
组,那就太好了。
我看过
stats::aggregate
,但我不知道如何用条件进行聚合。
使用
by
。
> by(df, df$factor.group %in% paste0('group', 1:2), aggregate, num_to_sum ~ id, sum)
df$factor.group %in% paste0("group", 1:2): FALSE
id num_to_sum
1 1 4
2 2 8
-----------------------------------------------------------------------------------------------------
df$factor.group %in% paste0("group", 1:2): TRUE
id num_to_sum
1 1 7
2 2 10