【问题标题】:Group by two column and summarize multiple columns按两列分组并汇总多列
【发布时间】:2020-09-10 20:20:38
【问题描述】:

我有一个数据框,我想按“状态”和“日期”列进行分组,然后像这样总结其他列的值。

df

State  Female  Male   Date
------------------------------
Texas  2       2     01/01/04
Texas  3        1     01/01/04
Texas  5        4     02/01/04
Cali   1        1     05/06/05
Cali   2        1     05/06/05
Cali   3         1    10/06/05
Cali   1         2     10/06/05
NY    10         5    11/06/05
NY    11         6    12/06/05

预期结果

df

State  Female  Male   Date
------------------------------
Texas  5       3     01/01/04
Texas  5        4     02/01/04
Cali   3        2     05/06/05
Cali   4         3    10/06/05
NY    10         5    11/06/05
NY    11         6    12/06/05

我尝试使用 group by 和 summarise,但我不知道我如何为 2 列做同样的事情

我的尝试

df <- df_homicides %>% 
        group_by(state) %>% 
        summarise(Female = sum(Female))

``
Thanks for your help!

【问题讨论】:

    标签: r dataframe dplyr tidyverse


    【解决方案1】:

    我们可以使用summariseacrossdplyr 版本&gt; = 1.00

    library(dplyr)
    df %>%
       group_by(State, Date) %>%
       summarise(across(everything(), sum, na.rm = TRUE), .groups = 'drop')
    # A tibble: 6 x 4
    #  State Date       Female  Male
    #  <chr> <chr>       <int> <int>
    #1 Cali  05/06/2005      3     2
    #2 Cali  10/06/2005      4     3
    #3 NY    11/06/2005     10     5
    #4 NY    12/06/2005     11     6
    #5 Texas 01/01/2004      5     3
    #6 Texas 02/01/2004      5     4
    

    或者使用来自base Raggregate

    aggregate(.~ State + Date, df, sum, na.rm = TRUE)
    

    数据

    df <-  structure(list(State = c("Texas", "Texas", "Texas", "Cali", "Cali", 
    "Cali", "Cali", "NY", "NY"), Female = c(2L, 3L, 5L, 1L, 2L, 3L, 
    1L, 10L, 11L), Male = c(2L, 1L, 4L, 1L, 1L, 1L, 2L, 5L, 6L), 
        Date = c("01/01/2004", "01/01/2004", "02/01/2004", "05/06/2005", 
        "05/06/2005", "10/06/2005", "10/06/2005", "11/06/2005", "12/06/2005"
        )), class = "data.frame", row.names = c(NA, -9L))
    

    【讨论】:

      【解决方案2】:

      试试这个。您可以使用summarise_all() 将多个变量聚合到所需的函数。代码如下:

      library(dplyr)
      #Code
      df %>% group_by(State,Date) %>%
        summarise_all(.funs = sum,na.rm=T)
      

      输出:

      # A tibble: 6 x 4
      # Groups:   State [3]
        State Date       Female  Male
        <chr> <chr>       <int> <int>
      1 Cali  05/06/2005      3     2
      2 Cali  10/06/2005      4     3
      3 NY    11/06/2005     10     5
      4 NY    12/06/2005     11     6
      5 Texas 01/01/2004      5     3
      6 Texas 02/01/2004      5     4
      

      使用的一些数据:

      #Data
      df <- structure(list(State = c("Texas", "Texas", "Texas", "Cali", "Cali", 
      "Cali", "Cali", "NY", "NY"), Female = c(2L, 3L, 5L, 1L, 2L, 3L, 
      1L, 10L, 11L), Male = c(2L, 1L, 4L, 1L, 1L, 1L, 2L, 5L, 6L), 
          Date = c("01/01/2004", "01/01/2004", "02/01/2004", "05/06/2005", 
          "05/06/2005", "10/06/2005", "10/06/2005", "11/06/2005", "12/06/2005"
          )), class = "data.frame", row.names = c(NA, -9L))
      

      【讨论】:

        猜你喜欢
        • 2016-11-15
        • 2019-04-27
        • 1970-01-01
        • 2016-12-31
        • 1970-01-01
        • 2014-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多