R 如何';解组';预先分组的数据帧

R 如何';解组';预先分组的数据帧,r,dataframe,dplyr,R,Dataframe,Dplyr,我使用的是R中的“esoph”数据。这是一个数据框,包含88个年龄/酒精/烟草组合的记录。以下是其数据摘录: 我试图实现的是实际删除alcgp列,但保留NCASE和ncontrols列的数据。因此,对于每个具有相同年龄组(agegp)和烟草组(tobgp)但不同酒精组(alcgp)的条目,将病例和对照组的值相加并存储在一行中 例如,第1、5、9、12行将被合并。这可以在data.table中高效地完成 esoph[,alcgp := NULL] # remove alcgp column 按

我使用的是R中的“esoph”数据。这是一个数据框,包含88个年龄/酒精/烟草组合的记录。以下是其数据摘录:

我试图实现的是实际删除alcgp列,但保留NCASE和ncontrols列的数据。因此,对于每个具有相同年龄组(agegp)和烟草组(tobgp)但不同酒精组(alcgp)的条目,将病例和对照组的值相加并存储在一行中


例如,第1、5、9、12行将被合并。

这可以在data.table中高效地完成

esoph[,alcgp := NULL] # remove alcgp column
按agegp和topgp合并(求和)NCASE和NCONControl。如果你

esoph[, .(sum(ncases),sum(ncontrols)), .(agegp,topgp)]
澄清: 您应该首先将数据集转换为data.table

library(data.table)
setDT(esoph)

如果您提供可复制的示例,那就太好了,很难从屏幕截图中复制。

这是
dplyr
中的一行代码。我强烈建议你去看看

库(dplyr)
esoph%>%
分组依据(年龄组、tobgp)%>%
总结(总案例数=总NCASE数),
总控制=总和(控制))
...
...
agegp tobgp总病例总对照
1 25-34 0-9g/天0 70
2 25-34 10-19              1             19
3 25-34 20-29              0             11
4 25-34 30+                0             16
5 35-44 0-9g/天2 109
6 35-44 10-19              4             46
7 35-44 20-29              3             27
8 35-44 30+                0             17
9 45-54 0-9g/天14 104
10 45-54 10-19             13             57

请不要将数据作为图像提供,而是作为可复制的R代码提供,例如通过
dput
。另请参阅:我大体上同意,但在这种情况下,这些数据随R一起出现,因此我认为没有必要。