簡體   English   中英

使用dplyr添加摘要行

[英]Using dplyr to add summary rows

       Gender Year.10 Year.11 Year.12 Year.13 Year.10.1 Year.11.1 Year.12.1 Year.13.1
1      FEMALE 1181980 1113480 1040960 1033150   1116220   1059850   1022950    974490
2        MALE  674020  783150  571170  594330    641620    767590    554290    563670
3 UNSPECIFIED   31930    7740   14670   17420     31930      5590      9170     17420

我已經匯總了我的數據,並想將這些總和添加到我的data.frame中各自的Genders下。 因此,舉例來說,在我的女性行之后,我想在其下方添加我的女性總和(使用Age ==“ All”),我想我可以使用dplyr完成此操作,但是我不知道如何在data.frame中選擇位置。

我認為必須遵循以下原則:

dummy.c %>%
group_by(Gender) %>%
rowwise () %>%
mutate () #### It's here where I don't know where to go on from 

我使用summarise_each(funs(sum=sum(., na.rm=TRUE)), starts_with("Year"))生成摘要,我可能必須將其放在mutate()中。

> dput(dummy.c[sample(1:nrow(dummy.c), 15, replace=FALSE),])
structure(list(Gender = structure(c(1L, 1L, 2L, 2L, 3L, 2L, 2L, 
2L, 3L, 3L, 1L, 2L, 2L, 3L, 3L), .Label = c("FEMALE", "MALE", 
"UNSPECIFIED"), class = "factor"), Age = structure(c(5L, 3L, 
3L, 4L, 7L, 6L, 5L, 8L, 6L, 8L, 2L, 7L, 1L, 5L, 2L), .Label = c("0-2", 
"3-9", "10-19", "20-39", "40-59", "60-64", "65+", "UNSP"), class = "factor"), 
Year.10 = c(484770L, 58440L, 58570L, 200290L, NA, 54780L, 
238600L, NA, 2470L, 10920L, 46890L, 63360L, 16900L, 12850L, 
NA), Year.11 = c(439860L, 92870L, 60060L, 264280L, NA, 54400L, 
258820L, NA, NA, NA, 30150L, 84750L, 22380L, NA, 2150L), 
Year.12 = c(454200L, 50900L, 55600L, 230460L, 3610L, 47960L, 
148530L, NA, NA, 5500L, 18020L, 64810L, 2260L, 5560L, NA), 
Year.13 = c(412650L, 84110L, 38000L, 205600L, NA, 40600L, 
185770L, 5670L, NA, 5700L, 19060L, 79150L, 5860L, NA, NA), 
Gender.1 = structure(c(1L, 1L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 
3L, 1L, 2L, 2L, 3L, 3L), .Label = c("FEMALE", "MALE", "UNSPECIFIED"
), class = "factor"), Age.1 = structure(c(5L, 3L, 3L, 4L, 
7L, 6L, 5L, 8L, 6L, 8L, 2L, 7L, 1L, 5L, 2L), .Label = c("0-2", 
"3-9", "10-19", "20-39", "40-59", "60-64", "65+", "UNSP"), class = c("ordered", 
"factor")), Year.10.1 = c(460340L, 52680L, 58570L, 197110L, 
NA, 54780L, 226110L, NA, 2470L, 10920L, 41370L, 52240L, 16900L, 
12850L, NA), Year.11.1 = c(417800L, 87280L, 60060L, 264280L, 
NA, 54400L, 248810L, NA, NA, NA, 30150L, 79200L, 22380L, 
NA, NA), Year.12.1 = c(447400L, 50900L, 50100L, 224700L, 
3610L, 47960L, 148530L, NA, NA, NA, 18020L, 59190L, 2260L, 
5560L, NA), Year.13.1 = c(395700L, 78440L, 36520L, 200050L, 
NA, 37360L, 185770L, 5670L, NA, 5700L, 19060L, 62130L, 5860L, 
NA, NA)), .Names = c("Gender", "Age", "Year.10", "Year.11", 
"Year.12", "Year.13", "Gender.1", "Age.1", "Year.10.1", "Year.11.1", 
"Year.12.1", "Year.13.1"), row.names = c(5L, 3L, 11L, 12L, 22L, 
14L, 13L, 16L, 21L, 23L, 2L, 15L, 9L, 20L, 17L), class = "data.frame")

編輯1:顯示數據

> head(dummy.c)

  Gender   Age Year.10 Year.11 Year.12 Year.13 Gender.1 Age.1 Year.10.1 Year.11.1 Year.12.1 Year.13.1
1 FEMALE   0-2   13700    2470    7820    2100   FEMALE   0-2     13700      2470      7820      2100
2 FEMALE   3-9   46890   30150   18020   19060   FEMALE   3-9     41370     30150     18020     19060
3 FEMALE 10-19   58440   92870   50900   84110   FEMALE 10-19     52680     87280     50900     78440
4 FEMALE 20-39  380610  387080  291930  371290   FEMALE 20-39    356070    372370    280720    356500
5 FEMALE 40-59  484770  439860  454200  412650   FEMALE 40-59    460340    417800    447400    395700
6 FEMALE 60-64   80090   76670   92750   60710   FEMALE 60-64     80090     76670     92750     49240`

tail(dummy.c)

        Gender   Age Year.10 Year.11 Year.12 Year.13    Gender.1 Age.1 Year.10.1 Year.11.1 Year.12.1
18 UNSPECIFIED 10-19    5690      NA      NA      NA UNSPECIFIED 10-19      5690        NA        NA
19 UNSPECIFIED 20-39      NA    5590      NA   11720 UNSPECIFIED 20-39        NA      5590        NA
20 UNSPECIFIED 40-59   12850      NA    5560      NA UNSPECIFIED 40-59     12850        NA      5560
21 UNSPECIFIED 60-64    2470      NA      NA      NA UNSPECIFIED 60-64      2470        NA        NA
22 UNSPECIFIED   65+      NA      NA    3610      NA UNSPECIFIED   65+        NA        NA      3610
23 UNSPECIFIED  UNSP   10920      NA    5500    5700 UNSPECIFIED  UNSP     10920        NA        NA
   Year.13.1
18        NA
19     11720
20        NA
21        NA
22        NA
23      5700

使用reshape2dplyr軟件包的替代方法(同一作者,btw = P):

df <- structure(...) # structure of your question

現在,融化並投射:

df %>% 
  select(-Gender.1,-Age.1) %>% 
  melt %>% # melting data.frame. See the results until here to better understanding.
  dcast(Gender + Age ~ variable, sum, na.rm=TRUE, margins = "Age")

發生了什么,一行一行地:

  1. 您的data.frame
  2. 刪除重復的列
  3. 融化data.frame。 直到這里看到結果以更好地理解。
  4. GenderAgevariable (在本例中為年份)進行匯總。 聚合函數是na.rm = TRUE的sum 然后, margin = "Age"根據需要將合計值按Age放置。

結果:

        Gender   Age Year.10 Year.11 Year.12 Year.13 Year.10.1 Year.11.1 Year.12.1 Year.13.1
1       FEMALE   3-9   46890   30150   18020   19060     41370     30150     18020     19060
2       FEMALE 10-19   58440   92870   50900   84110     52680     87280     50900     78440
3       FEMALE 40-59  484770  439860  454200  412650    460340    417800    447400    395700
4       FEMALE (all)  590100  562880  523120  515820    554390    535230    516320    493200
5         MALE   0-2   16900   22380    2260    5860     16900     22380      2260      5860
...
17 UNSPECIFIED  UNSP   10920       0    5500    5700     10920         0         0      5700
18 UNSPECIFIED (all)   26240    2150   14670    5700     26240         0      9170      5700 

希望能幫助到你。

暫無
暫無

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

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