R Group_by/Summarise 未返回预期结果

R Group_by/Summarise not returning expected results

我有一个以下格式的数据集存储在 R 的大标题中:

Yr Gender Number Disease Age Population
1901 M 100 A 1-5 1500
1901 F 105 A 1-5 1400
1901 M 23 A 6-10 1300
1901 F 87 A 6-10 1400
1901 M 102 B 1-5 1500
1901 F 103 B 1-5 1400
1901 M 42 B 6-10 1300
1901 F 67 B 6-10 1400

人口与每年的每个年龄段和性别相关联。 我需要按年份和性别分组,然后计算每年每种性别的 (number/population)(疾病类型并不重要)。

我正在使用这段代码: group_by(Yr,Gender) %>% summarise(rate=sum(Number/sum(unique(Population))))

但是我知道这给了我不正确的结果,因为当我对产生的 M 和 F 数字求和时,它们每年都超过了它们应该做的(几乎翻了一番)。

谁能给我指出正确的方向,我认为这是因为性别和年龄的人口数据不同,但我不知道如何解决这个问题?

编辑

感谢您的回复 - 在输出中,我希望使用每个性别的数字总和计算比率,但计算的是当年的总人口,而不是分组的性别人口,即总数(每个性别)/总人口(当年)。

有了各种不同的总和,这就变成了一个多步骤的过程。

第一步是按年份、性别和年龄汇总,以确定每个年龄组的总人数,并删除该组的冗余人口值。
下一步是总结当年所有年龄和性别的总人口。 最后一步是汇总中间值以确定每年的 gender/tot pop 的总数。

#test data
df<- structure(list(Yr = c(1901L, 1901L, 1901L, 1901L, 1901L, 1901L, 
                         1901L, 1901L, 1902L, 1902L, 1902L, 1902L, 1902L, 1902L, 1902L, 1902L), 
                  Gender = c("M", "F", "M", "F", "M", "F", "M", "F", "M", "F", "M", "F", "M", "F", "M", "F"), 
                  Number = c(100L, 105L, 23L, 87L, 102L, 103L, 42L, 67L, 100L, 105L, 23L, 87L, 102L, 103L, 42L, 67L), 
                  Disease = c("A", "A", "A", "A", "B", "B", "B", "B", "A", "A", "A", "A", "B", "B", "B", "B"), 
                  Age = c("1-5", "1-5",   "6-10", "6-10", "1-5", "1-5", "6-10", "6-10", "1-5", "1-5", "6-10", 
                          "6-10", "1-5", "1-5", "6-10", "6-10"), 
                  Population = c(1500L, 1400L, 1300L, 1400L, 1500L, 1400L, 1300L, 1400L, 1000L, 1100L, 
                   1200L, 1300L, 1000L, 1100L, 1200L, 1300L)), 
             class = "data.frame", row.names = c(NA, -16L))

library(dplyr)
#step 1 & step 2 (begins after the ungroup) 
intermediate <- df %>% group_by(Yr,Gender, Age) %>% 
           summarize(Num= sum(Number), Pop = mean(Population)) %>%
           ungroup() %>% 
           group_by(Yr) %>% mutate(YearPop = sum(Pop)) %>% ungroup()

#final step
answer <- intermediate1 %>% group_by(Yr, Gender) %>% summarize(rate = sum(Num) / mean(YearPop))

#final answer  
        Yr Gender   rate
      <int> <chr>   <dbl>
   1  1901 F      0.0646
   2  1901 M      0.0477
   3  1902 F      0.0787
   4  1902 M      0.0580