簡體   English   中英

R Group_by/Summarise 未返回預期結果

[英]R Group_by/Summarise not returning expected results

我有一個以下格式的數據集存儲在 R 的一個大標題中:

性別 數字 疾病 年齡 人口
1901 100 一個 1-5 1500
1901 F 105 一個 1-5 1400
1901 23 一個 6-10 1300
1901 F 87 一個 6-10 1400
1901 102 1-5 1500
1901 F 103 1-5 1400
1901 42 6-10 1300
1901 F 67 6-10 1400

人口與每年的每個年齡段和性別有關。 我需要按年份和性別分組,然后計算每年每種性別的(數量/人口)(疾病類型並不重要)。

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

但是,我知道這給了我不正確的結果,因為當我將產生的 M 和 F 數字相加時,它們每年都比他們應該做的要多(幾乎翻了一番)。

誰能在這里指出我正確的方向,我認為這是因為性別和年齡的人口數據不同,但我不知道如何克服這個問題?

編輯

感謝您的回復 - 在 output 中,我希望使用每個性別的數字總和但超過當年的總人口而不是分組的性別人口,即總數(每性別)/總人口(為此年)。

隨着各種不同的總和,這變成了一個多步驟的過程。

第一步是按年份、性別和年齡進行匯總,以確定每個年齡組的總數並刪除該組的冗余人口值。
下一步是總結當年所有年齡和性別的總人口。 最后一步是匯總中間值以確定每年按性別/流行人數確定的總人數。

#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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM