计算多个列并在R中分组

时间:2017-06-12 20:56:27

标签: r dplyr

我上一个问题的答案帮助我理解了dplyr n()。但我仍然不能适用于我想解决的问题。所以,我在这里发布数据和实际问题。数据如下

  finalCalledPartyNumber Call Day           Call Date             Block Answered Call Duration Opty ID Opty Created Date BC ID
             19183598259   Monday 2016-12-05 12:26:46 Block 2(12:30 pm)             1        5    1234              <NA>  <NA>
             17135796188   Monday 2016-12-05 12:18:24 Block 2(12:30 pm)             1       16    <NA>              <NA>  3456
             19183598259   Monday 2016-12-05 15:43:33  Block 4(5:30 pm)             1       10    <NA>              <NA>  4567
             17135796188  Tuesday 2016-12-06 11:53:50 Block 2(12:30 pm)             1       85    <NA>              <NA>  5566
             19014741000  Tuesday 2016-12-06 12:00:11 Block 2(12:30 pm)             1       42    6789              <NA>  <NA>
             19014741000  Tuesday 2016-12-06 10:43:20 Block 2(12:30 pm)             1       58    2345              <NA>  <NA>
  BC Created Date
             <NA>
             <NA>
             <NA>
             <NA>
             <NA>
             <NA>

对于每个finalCalledPartyNumber,我想计算每个finallCalledPartyNumber被调用的次数,Opty IDBC ID的数量。数据集很大,而<NA>只表示没有创建Opty IDBC ID

输出:

finalCalledPartyNumber    n_opty    n_BC    n_calls
           19183598259         1       1    2
           17135796188         0       2    2
           19014741000         2       0    2

感谢您的帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

这是使用dplyr实现所需结果的另一种方法,但它并没有使用n()

 df %>%  group_by(finalCalledPartyNumber) %>% 
          summarise(n_opty = sum(!is.na(Opty.Id)),
                    n_BC = sum(!is.na(BC.ID)),
                    n_calls = sum(!is.na(Call)))

输出:

 # A tibble: 3 x 4
   finalCalledPartyNumber  n_opty  n_BC n_calls
                     <dbl>  <int> <int>   <int>
  1            17135796188      0     2       2
  2            19014741000      2     0       2
  3            19183598259      1     1       2

答案 1 :(得分:0)

n()计算每个组中的行数。如果您不想计算特定列的重复项,可以使用n_distinct()并传入列的名称。您还可以使用count()作为group_by() + summarize(count = n())的简写,tally()作为summarize部分的简写。

以下是不同动词和函数的演示:


library(dplyr)

mtcars %>% 
  count(cyl)
#> # A tibble: 3 x 2
#>     cyl     n
#>   <dbl> <int>
#> 1     4    11
#> 2     6     7
#> 3     8    14

mtcars %>%
  group_by(cyl) %>%
  summarize(n = n())
#> # A tibble: 3 x 2
#>     cyl     n
#>   <dbl> <int>
#> 1     4    11
#> 2     6     7
#> 3     8    14


mtcars %>%
  group_by(cyl) %>%
  tally()
#> # A tibble: 3 x 2
#>     cyl     n
#>   <dbl> <int>
#> 1     4    11
#> 2     6     7
#> 3     8    14

mtcars %>%
  group_by(cyl) %>%
  summarize(n_distinct = n_distinct(mpg))
#> # A tibble: 3 x 2
#>     cyl n_distinct
#>   <dbl>      <int>
#> 1     4          9
#> 2     6          6
#> 3     8         12

mtcars %>%
  group_by(cyl) %>%
  distinct(mpg) %>%
  tally()
#> # A tibble: 3 x 2
#>     cyl     n
#>   <dbl> <int>
#> 1     4     9
#> 2     6     6
#> 3     8    12